public class Test2 { public static void main(String[] args) { Integer i1 = 256; Integer i2 = 256; if (i1 == i2) System.out.println("相等!"); else System.out.println("不相等!"); }}
调试欢乐多
Integer i2 = 256; 如果用 ==比较其相等性时,对应的原子数最大是255
Integer i2 = 256; 如果用 ==比较其相等性时,对应的原子数最大是255
不用的,JDK 5.0有自动装箱拆箱机制
int i1 = 256; int i2 = 256; 就可以使用i1 == i2 判断;如果是
Integer i1 = 256; Integer i2 = 256; 则需要使用i1 .equals( i2)判断
但是Integer缓存了-128至127,所以当数在这个范围内,==返回true.
public class Test2 { public static void main(String[] args) { Integer i1 = 127; Integer i2 = 127; if (i1 == i2) System.out.println("相等!"); else System.out.println("不相等!"); } }输出相等!
不知道你想证明什么:integer是一个对象,如果你用==来比较俩个Integer对象的话,是可定不会相等的,==比较的是这两个Integer对象的地址,而不是你付给他们的那个值256;
用int型可以直接==来比较,equals也可以!
==操作符是比较是否同一对象(底层就是比较内存地址)
比较内容应该用equal方法
还在用JDK 5.0以下的版本吧?
不知道5.0加了新特性?
其中一个就是自动装箱与拆箱
即:
Integer i=5;
int a=i;
都行
但是Integer缓存了-128至127,所以当数在这个范围内,==返回true.原来如此建议用 i1.equals(i2)
或 i1.intValue() == i2.intValue()
==返回true.超出这个范围则为false 此外:==判断的是地址是否相等,equals判断的是值是否相等
public class Test2 {
public static void main(String[] args) {
Integer i1 = 256;
Integer i2 = 256;
if (i1.equals(i2) )
System.out.println("相等");
else
System.out.println("不相等");
}
}
输出相等public class Test2 {
public static void main(String[] args) {
Integer i1 = 256;
Integer i2 = 256;
if (i1==i2 )
System.out.println("相等");
else
System.out.println("不相等");
}
}输出不等public class Test2 {
public static void main(String[] args) {
int i1 = 256;
int i2 = 256;
if (i1==i2 )
System.out.println("相等");
else
System.out.println("不相等");
}
}输出相等
(一)Integer i=1;
Integer j=1;
if(i==j)
System.out.println("相等");
else
System.out.println("不相等");
(二)int i=1;
int j=1;
if(i==j)
System.out.println("相等");
else
System.out.println("不相等");
注:(一)我们是定义了一个引用指向对象1,(二)中只是定义了两个变量,赋值为1;
(一)Integer i=1;
Integer j=1;
if(i==j)
System.out.println("相等");
else
System.out.println("不相等");
(二)int i=1;
int j=1;
if(i==j)
System.out.println("相等");
else
System.out.println("不相等");
注:(一)我们是定义了一个引用指向对象1,(二)中只是定义了两个变量,赋值为1;
要比较对象的值一般需要equles或者把他们转换成int使用==对比。
public class Test1 {
public static void main(String[] args) {
Integer i1 = 256;
Integer i2 = 256;
if (i1.equals(i2) )
System.out.println("相等");
else
System.out.println("不相等");
}
} 显然是结果是相等的 。equal比较的是两个对象的内容是否相等。 上面是JDK1.5的新特性,叫自动装包和拆包。
所以上面自动封装成Integer对象。 它们两个对象的内容相同 所以显示相等
public class Test1 {
public static void main(String[] args) {
Integer i1 = 256;
Integer i2 = 256;
if (i1==i2)
System.out.println("相等");
else
System.out.println("不相等");
}
} 结果是不相等的。
==比较的是内存地址。i1,i2自动装包成Integer类,由于它们的内存地址是不同的,所以显示不相等。 public class Test1 {
public static void main(String[] args) {
Integer i1 = 127;
Integer i2 = 127;
if (i1.equals(i2) )
System.out.println("相等");
else
System.out.println("不相等");
}
} 结果是相等的。显然比较的内容相等。
public class Test1 {
public static void main(String[] args) {
Integer i1 = 127;
Integer i2 = 127;
if (i1==i2)
System.out.println("相等");
else
System.out.println("不相等");
}
}结果是相等的。由于自动装包,它们其实都是装在一个Integer对象中。
这里就有特殊性质了。ava编译器在1.5版本中,对原型的自动装包是有一个规定的,对于boolean,byte相同的值放在同一个包装器对象中,
char<=127的放在同一个包装对象中,short和int在-128到127之间的数据放在同一个包装对象中。