相关疑难解决方法(0)

当比较Java中的Integer包装器时,为什么128 == 128 false但127 == 127为真?

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之间的数字为真.

java comparison integer pass-by-reference pass-by-value

160
推荐指数
4
解决办法
4万
查看次数

在Java中使用==运算符来比较包装器对象

我正在阅读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'

java integer equals wrapper operator-keyword

51
推荐指数
3
解决办法
2万
查看次数

为什么等于运算符的Integer值直到128数?

为什么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)

java integer equals-operator

25
推荐指数
3
解决办法
2万
查看次数

为什么某些Integer对象的== true?

可能重复:
整数包装器对象仅在值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,因为它是与==关系运算符的引用比较.但第三次打印给出了错误,我不明白这种不一致.

非常感谢您的解释!

java integer

19
推荐指数
3
解决办法
1199
查看次数

整数包装类和==运算符 - 指定的行为在哪里?

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 comparison boxing unboxing

9
推荐指数
1
解决办法
7216
查看次数

后增量后==的令人费解的行为

有人在一些论坛帖子中假设很多人甚至是经验丰富的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语言的例子?

java post-increment

9
推荐指数
1
解决办法
246
查看次数

java == for Integer

可能重复:
java上的行为不一致==
整数包装器对象仅在值127内共享相同的实例?

我发现了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)

有人可以解释为什么会这样吗?

java integer ocpjp

8
推荐指数
2
解决办法
1233
查看次数

比较整数时出现意外结果

可能重复:
整数包装器对象仅在值127内共享相同的实例?
如何!=和==运算符在Java中使用整数?

我尝试将两个整数与以下情况进行比较,并得到意想不到的结果

  1. 当我做了以下时,打印了@@@.

     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)
  2. 当我做了以下时,@@@没有打印出来.

     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)

谁能告诉我可能是什么原因.

java

5
推荐指数
2
解决办法
123
查看次数

==运算符在Java中的对象

我无法理解在以下代码中创建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)

java casting

5
推荐指数
1
解决办法
119
查看次数

自动装箱问题

可能重复:
包装类和==运算符

当我学习自动装箱时,在网站上看到这段代码.

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 autoboxing

3
推荐指数
1
解决办法
395
查看次数