class D {
public static void main(String args[]) {
Integer b2=128;
Integer b3=128;
System.out.println(b2==b3);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
false
Run Code Online (Sandbox Code Playgroud)
class D {
public static void main(String args[]) {
Integer b2=127;
Integer b3=127;
System.out.println(b2==b3);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
true
Run Code Online (Sandbox Code Playgroud)
注意:-128到127之间的数字为真.
我正在阅读Kathy Sierra和Bert Bates的SCJP Java 6,这本书让我很困惑.在页245上,他们在下面说明以下代码.
Integer i1 = 1000;
Integer i2 = 1000;
if(i1 != i2)
System.out.println("different objects");
//Prints output
different objects
Run Code Online (Sandbox Code Playgroud)
然后在下一页上,他们有以下代码
Integer i3 = 10;
Integer i4 = 10;
if(i3 == i4)
System.out.println("same objects");
//Prints output
same objects
Run Code Online (Sandbox Code Playgroud)
我很困惑!当我自己尝试这个时,似乎你不能使用==来比较你使用equals()方法的方式.即使整数变量设置为相同的值(即10),使用==总是给我'假'.我对么?使用==来比较相同的Integer对象(具有相同的值)将始终导致'false'
为什么Integer "="运算符不适用于128和Integer值之后?有人可以解释这种情况吗?
这是我的Java环境:java版"1.6.0_37"
Java(TM)SE运行时环境(版本1.6.0_37-b06)
Java HotSpot(TM)64位服务器VM(内置20.12-b01,混合模式)
示例代码:
Integer a;
Integer b;
a = 129;
b = 129;
for (int i = 0; i < 200; i++) {
a = i;
b = i;
if (a != b) {
System.out.println("Value:"+ i + " - Different values");
} else {
System.out.println("Value"+ i + " Same values");
}
}
Run Code Online (Sandbox Code Playgroud)
控制台输出的一部分:
Value:124 - Same values
Value:125 - Same values
Value:126 - Same values
Value:127 - Same values
Value:128 - Different values
Value:129 …Run Code Online (Sandbox Code Playgroud) 可能重复:
整数包装器对象仅在值127内共享相同的实例?
我从Khalid Mughal SCJP复制了以下程序片段,但我无法
理解输出.
public class RQ200_60 {
public static void main(String[] args) {
Integer i = -10;
Integer j = -10;
System.out.print(i==j); // output: true -- why true?
System.out.print(i.equals(j)); // output: true
Integer n = 128;
Integer m = 128;
System.out.print(n==m); // output: false
System.out.print(n.equals(m)); // output: true
}
}
Run Code Online (Sandbox Code Playgroud)
上面的程序为第一个print语句提供了true,但它应该给出false,因为它是与==关系运算符的引用比较.但第三次打印给出了错误,我不明白这种不一致.
非常感谢您的解释!
Integer integer1 = 127;
Integer integer2 = 127;
System.out.println(integer1 == integer2);//true
integer1 = 128;
integer2 = 128;
System.out.println(integer1 == integer2);//false
Run Code Online (Sandbox Code Playgroud)
我发现它返回==(如果是)在范围之内-128 - 127,为什么会有这样的规范?
有人在一些论坛帖子中假设很多人甚至是经验丰富的Java开发人员都不会理解以下Java代码的和平.
Integer i1 = 127;
Integer i2 = 127;
System.out.println(i1++ == i2++);
System.out.println(i1 == i2);
Run Code Online (Sandbox Code Playgroud)
作为一个对Java感兴趣的人,我给了他自己的想法并得出了以下结果.
System.out.println(i1++ == i2++);
// True, since we first check for equality and increment both variables afterwards.
System.out.println(i1 == i2);
// True again, since both variables are already incremented and have the value 128
Run Code Online (Sandbox Code Playgroud)
Eclipse告诉我不然.第一行是真的,第二行是假的.
我真的很感激解释.
第二个问题.这个Java是特定的还是这个例子也适用于基于C语言的例子?
我发现了Integer对象的以下==行为,我无法理解它.(我很清楚,应该使用equals进行此类比较,但我正在为OCPJP学习......)
简而言之,==按预期工作1000,但不是10.
前一段代码是:
Integer i1 = 1000;
Integer i2 = 1000;
if(i1 != i2) System.out.println("different objects");
if(i1.equals(i2)) System.out.println("meaningfully equal");
Run Code Online (Sandbox Code Playgroud)
它的行为与人们期望的一样:
different objects
meaningfully equal
Run Code Online (Sandbox Code Playgroud)
后者虽然:
Integer i3 = 10;
Integer i4 = 10;
if(i3 == i4) System.out.println("same object");
if(i3.equals(i4)) System.out.println("meaningfully equal");
Run Code Online (Sandbox Code Playgroud)
有以下输出:
same object
meaningfully equal
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么会这样吗?
我尝试将两个整数与以下情况进行比较,并得到意想不到的结果
当我做了以下时,打印了@@@.
class C {
static Integer a = 127;
static Integer b = 127;
public static void main(String args[]){
if(a==b){
System.out.println("@@@");
}
}
}
Run Code Online (Sandbox Code Playgroud)当我做了以下时,@@@没有打印出来.
class C {
static Integer a = 145;
static Integer b = 145;
public static void main(String args[]){
if(a==b){
System.out.println("@@@");
}
}
}
Run Code Online (Sandbox Code Playgroud)谁能告诉我可能是什么原因.
我无法理解在以下代码中创建obj和obj2对象的方式的差异.特别是,我不确定如何将一个原语强制转换为一个对象.看看这里的其他一些问题,我认为这是不可能的.但是以下程序编译并运行正常.在第一种情况下,输出是假的,在第二种情况下,它是真的.
public class Test {
public static void main(String args[]){
Integer num = new Integer(3) ;
Object obj = num;
Integer[] integerArr = {1, 2, 3, 4};
Object[] objArr = integerArr;
boolean contains = false;
for (int i = 0; i < objArr.length; i++){
if (objArr[i] == obj){
contains = true;
break;
}
}
System.out.println(contains);
int num2 = 3 ;
Object obj2 = num2;
Integer[] integerArr2 = {1, 2, 3, 4};
Object[] objArr2 = integerArr2;
boolean contains2 = false;
for …Run Code Online (Sandbox Code Playgroud) 可能重复:
包装类和==运算符
当我学习自动装箱时,在网站上看到这段代码.
Integer i1 = 1;
Integer i2 = 1;
// true
System.out.println(i1 == i2);
Integer i3 = -200;
Integer i4 = -200;
// false
System.out.println(i3 == i4);
Run Code Online (Sandbox Code Playgroud)
我能理解为什么第二次比较会给出错误(比较参考文献).但为什么它会给第一个真实的呢?
java ×10
integer ×5
comparison ×2
autoboxing ×1
boxing ×1
casting ×1
equals ×1
ocpjp ×1
unboxing ×1
wrapper ×1