先来看一段代码:
public class Test20110712 {
public static void main(String[] args) {
Integer i = 3;
Integer j = i;
i++;
Integer a = 5;
Integer b = 6;
a++;
Integer m = 127;
Integer n = 128;
m++;
System.out.println(i==j); //false
System.out.println(a==b); //true
System.out.println(m==n); //false
}
}
奇怪了,看完这段代码,这是怎么回事?==是比较对象引用吗,那i==j怎么会为false,难道==比较的对象的值,a==b好像支持这一观点,咦,那m==n怎么又成了false了,真是把我搞晕了。
有什么办法,上网查资料。经过一段时间的网搜,终于有眉目了。看完下面一段话,豁然开朗,==比较的还是对象的引用,只不过封装类有自动装箱和拆箱在搅乱。
下面是网上的一段解释:
对于如下范围内的简单数据类型:
*
boolean类型的值
*
所有byte类型的值
*
在-128~127之间的short类型的值
*
在-128~127之间的int类型的值
*
在/u000~/u007F之间的char类型的值
它们在使用自动装箱转换成相关封装类型对象的时候,其行为也和String型类似。在上面列表范围中的数据在进行自动装箱的时候,将首先检查内存中是否已经有使用自动装箱产生的具有相同值的对象。如果已经有一个“值”相同的对象存在,那么并不会产生新的对象。这个机制和使用String s=“test”这种方式产生一个字符串对象类似。也就是说,当简单类型的数据列表中的数据类型和对应范围内的值的时候,使用自动装箱得到的对象可能是已经在内存中存在的,而不是新产生的,就跟String类型数据一样。
分享到:
相关推荐
本文将深入探讨 Java 中的 Integer 比较,了解为什么使用 "==" 运算符可能会出错,并解释如何正确地使用 equals() 方法来比较 Integer 对象。 Java 中的 Integer 对象 在 Java 中,Integer 是一个不可变的类,它...
在表达式`i1 == i2 + i3`或`i4 == i5 + i6`中,我们看到`==`操作符被用于比较`Integer`对象。在这种情况下,Java会进行拆箱操作,即将`Integer`对象转换为其对应的`int`值,然后进行数值比较。由于`i2`和`i3`(或者`...
2. 创建`integerSet`对象`d`,并调用`bool`、`jiao`、`bing`和`delete`方法,实现集合的比较、交集、并集以及删除操作。 通过以上分析可以看出,`integerSet`类实现了基本的集合操作,包括比较、交集、并集及删除等...
这是因为Integer对象提供了更丰富的功能,比如比较操作、null安全的方法等。此外,Integer还兼容Java的自动装箱和拆箱机制,使得代码更加简洁。 例如,以下是一个使用Integer作为返回值类型的MyBatis示例: ```xml...
当我们在程序中创建Integer对象时,如果值在-128到127之间,Integer对象会直接从缓存池中获取或复用已存在的对象,避免了重复创建。这是因为Java的自动装箱拆箱机制,使得Integer和int之间的转换更加便捷,但同时也...
这个比较器能够处理不同类型的对象:字符串(`String`)、整型(`Integer`)、布尔型(`Boolean`)以及一个名为`Person`的自定义类。 #### 2. `Comparator`接口 在Java中,`java.util.Comparator`是一个功能接口,...
// 创建一个值为1234的Integer对象 ``` #### 3. 方法概览 `Integer`类提供了一系列的方法来操作和转换整数值: - **转换方法**:如`parseInt(String s)`用于将字符串转换为整数,`toString(int i)`用于将整数...
此外,`Integer`类还提供了一些实用方法,比如`parseInt()`用于将字符串转换为整数,`toString()`用于将整数转换为字符串,以及`compareTo()`用于比较两个`Integer`对象的大小。 总的来说,`int`适合于需要高性能...
如果比较的是数值,可以使用`compareTo()`方法,或者将`Integer`对象转换为`int`再进行比较。 在缓存和常量池方面,`Integer`类提供了一个缓存机制,用于存储-128到127之间的整数值。这意味着在这个范围内创建`...
举例分析 equals 和 hashcode 方法,hashcode应该怎么样生成 8个基本类型与基本对象的比较:byte与Byte shot与Short int与Integer long与Long float与Float double与Double char与Character
在某些情况下,我们可能需要将 `BigDecimal` 对象转换为 `Integer` 对象。本文将详细介绍三种将 `BigDecimal` 转换为 `Integer` 的方法。 1. 使用 `intValue()` 方法 `intValue()` 方法是最直接的转换方式,它会...
在某些情况下,我们可能需要将int转换为Integer对象,这个过程称为自动装箱。反之,将Integer对象转换回int称为自动拆箱。例如,`Integer i = 56;`就是自动装箱,`int j = i;`则是自动拆箱。 然而,对于Integer对象...
总结,`IntegerSet`类的实现涉及了C++中的面向对象特性,包括类的定义、构造函数、数据成员、成员函数以及标准库的使用(如`std::vector`和算法)。通过这样的设计,我们可以方便地对整数集合进行操作,实现了集合的...
在实际开发中,很多时候开发者会直接使用`==`来比较两个`Long`或`Integer`对象,但这种做法通常是错误的。这是因为`Long`和`Integer`都是对象类型,而非基本数据类型。因此,当使用`==`进行比较时,实际上是在比较...
C++是一种通用的、面向对象的编程语言,因其高效的性能和丰富的库支持,在算法竞赛和系统编程中被广泛使用。这个文件可能包含了一系列函数定义、数据结构的使用以及算法的实现,用于解决"Integer Inquiry"的具体问题...
关于`==`和`equals()`方法,它们在比较对象时有不同的含义。`==`操作符主要用于比较两个变量是否指向同一块内存空间,也就是说,它检查两个变量是否引用了同一个对象。如果两个变量都是对象类型,`==`会比较它们内部...
这个方法通常在你需要使用`Integer`对象的特性(如缓存、比较操作或泛型方法参数)时使用。 在面试或笔试题中,如题目所示,`a = Integer.parseInt("123")`会将字符串"123"解析为`int`类型的值,并赋给变量a,所以a...
为了比较HugeInteger对象,请提供以下方法:isEqualTo,isNotEqualTo,isGreaterThan,isLessThan,isGreaterThanOrEqualTo和isLessThanOrEqualTo。 每个方法都是一个谓词方法,如果两个HugeInteger对象之间的关系...
从字节码中,我们可以看到,Java 编译器将 Integer 对象的自加操作分解成了三个步骤:首先,调用 java.lang.Integer.intValue() 方法将 Integer 对象拆箱成 int 类型的值;然后,对 int 类型的值进行加一操作;最后...
在Java编程中,对象的比较和排序是常见的需求,特别是在处理集合时。Java提供了两种主要的方式来实现对象之间的比较,即`Comparable`接口和`Comparator`接口。这两种接口使得自定义对象可以根据特定的规则进行排序。...