先来看一段代码:
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类型数据一样。
分享到:
相关推荐
义一个整数集合类integerSet。这种类型的对象可以存储10个20~80之间的整数,即他的内部有一个整型数组存储数据。编程: (1) 判断两个inergerSet类对象S1和S2是否相等。提示:集合相等的前提是所有元素相等。 (2)...
举例分析 equals 和 hashcode 方法,hashcode应该怎么样生成 8个基本类型与基本对象的比较:byte与Byte shot与Short int与Integer long与Long float与Float double与Double char与Character
可以作为初学者的参考,让你更加了解java基础的一些必须掌握的知识。
System.err.println("未找到合适的比较器"); return 1; } } public int compare(String o1, String o2) { String s1 = (String) o1; String s2 = (String) o2; int len1 = s1.length(); int len2 = s2....
为了比较HugeInteger对象,请提供以下方法:isEqualTo,isNotEqualTo,isGreaterThan,isLessThan,isGreaterThanOrEqualTo和isLessThanOrEqualTo。 每个方法都是一个谓词方法,如果两个HugeInteger对象之间的关系...
当 BigDecimal 值小于或等于 Integer.MAX_VALUE(2^31-1)时,intValue() 方法返回 BigDecimal 对象的整数值。例如,在上面的示例代码中,输入的 BigDecimal 值为 123.45,其返回的 intValue() 值为 123。 当 ...
集合类 C++ 面向对象
int 是基本类型,直接存数值,而integer是对象,用一个引用指向这个对象 1.Java 中的数据类型分为基本数据类型和复杂数据类型 int 是前者而integer 是后者(也是一个类);因此在类进行初始化时int类的变量...
基本数据类型是可以用“==”进行比较,而引用数据类型则不可以,一般是通过equals方法来实现比较。 二 、再说说基本数据类型与引用数据类型的区别? 特点: 1、从概念方面来说 基本数据类型:变量名指向具体的...
EmptyUtils.java---Java验证对象是否为空的工具类,工具可判断List,String,Integer,Object,Object[]类型的对象是否为空。
包装类型:Byte,Short,Integer,Long,Float,Double,Boolean,Character 4.String 5.Collection 6.Map 7.Enum 8.TimeZone 9.Class 10.BigDecimal 11.BigInteger 12.Class 13.StringBuffer 14.StringBuilder ...
field.setInt(obj, Integer.parseInt(value)); }else if(typeName.equals("float")) { field.setFloat(obj, Float.parseFloat(value)); }else if(typeName.equals("double")) { field....
C++中临时对象(Temporary Object)又称无名对象。临时对象主要出现在如下场景。 1.建立一个没有命名的非堆(non-heap)对象,也就是无名对象时,会产生临时对象。 Integer inte= Integer(5); //用无名临时对象...
主要介绍了基于jdk1.8的Java源码详解 Integer,Integer是int的Warpper类,是面向对象的即OOP的对象类型,,需要的朋友可以参考下
先来分析选型A,Integer i01 = 59,是一个装箱的过程,在进行i01 == i02的比较过程中,因为右边是整型,发生了拆箱的动作,所以进行了值得比较,所以返回true。 在这里拿出Integer a = 59,Integer b = 59,这种又会...
=等比较符对两个对象进行比较,尽管有时候两个对象的内容完全一样,但是对象的引用却是不一样的!因此,对两个对象的实际内容进行比较时,必须使用所有对象都适用的特殊方法equals()。 看下面一个例子: ...
为了比较HugeInteger对象,请提供以下内容方法:isEqualTo,isNotEqualTo,isGreaterThan,isLessThan,isGreaterThanOrEqualTo 和isLessThanOrEqualTo。 其中每个都是谓词方法,如果存在关系,则返回true 保持在两...
(1)使用句柄:如果使用句柄访问方式, Java 堆中将会划分出一块内存来作为句柄池,reference 中存储的就是对象的句柄地址,而句柄中包含了对象实例数据
•==和equals比较运算符:==要求两个引用变量指向同一个对象才会返回true。equals方法则允许用户提供自 定义的相等规则。 •Object类提供的equals方法判断两个对象相等的标准与==完全相同。因此开发者通常需要...
主要给大家介绍了关于Java 9中如何对IntegerCache进行修改的相关资料,文中通过示例代码介绍的非常详细,对大家学习或使用java9具有一定的参考学习价值,需要的朋友们下面随着小编来一起看看吧。