相关疑难解决方法(0)

在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万
查看次数

整数包装器对象仅在值127内共享相同的实例?

这里他们是同一个实例:

Integer integer1 = 127;
Integer integer2 = 127;
System.out.println(integer1 == integer2);  // outputs "true"
Run Code Online (Sandbox Code Playgroud)

但在这里他们是不同的实例:

Integer integer1 = 128;
Integer integer2 = 128;
System.out.println(integer1 == integer2);  // outputs "false"
Run Code Online (Sandbox Code Playgroud)

为什么包装器对象仅在值127内共享同一实例?

java caching integer

40
推荐指数
3
解决办法
5824
查看次数

为什么整数常量池的行为在127处变化?

我无法理解Java Constant Pool for Integer的工作原理.

我理解字符串的行为,因此能够证明自己与Integer Constants的情况相同.

所以,对于整数

Integer i1 = 127;
Integer i2 = 127;
System.out.println(i1==i2); // True
Run Code Online (Sandbox Code Playgroud)

&

Integer i1 = new Integer(127);
Integer i2 = new Integer(127);
System.out.println(i1==i2); // False
Run Code Online (Sandbox Code Playgroud)

直到这里,一切都在我的脑海里.

我无法消化的是,当我从127增加整数时,它的行为有所不同.这种行为在127之后发生变化,下面是代码片段

Integer i1 = 128;
Integer i2 = 128;
System.out.println(i1==i2); // False. WHY?????
Run Code Online (Sandbox Code Playgroud)

有人可以帮我理解吗?

java integer constants

36
推荐指数
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万
查看次数

比较Java中的Integer值,奇怪的行为

与我同行 ..

Integer x = 23;
Integer y = 23;

if (x == y)
    System.out.println("what else");      // All is well as expected
else
    System.out.println("...");
Run Code Online (Sandbox Code Playgroud)

Integer x = someObject.getIndex();
Integer y = someOtherObject.getSomeOtherIndex();

if (x == y)
    System.out.println("what else");  
else
    System.out.println("...");        // Prints this 
Run Code Online (Sandbox Code Playgroud)

嗯......我尝试转换为int

int x = someObject.getIndex();
int y = someOtherObject.getSomeOtherIndex()

if (x == y)       
    System.out.println("what else");   // works fine
else
    System.out.println("...");  
Run Code Online (Sandbox Code Playgroud)

他们都是整数?

System.out.println(x.getClass().getName());              // java.lang.Integer
System.out.println(y.getClass().getName());              // java.lang.Integer
System.out.println(someObject.getIndex());               // java.lang.Integer
System.out.println(someOtherObject.getSomeOtherIndex()); // java.lang.Integer
Run Code Online (Sandbox Code Playgroud)

你们有什么感想?什么可以解释这样的事情?

java

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

盒装基元和等价

所以我今天被问到这个问题.

Integer a = 3;
Integer b = 2;
Integer c = 5;
Integer d = a + b;
System.out.println(c == d);
Run Code Online (Sandbox Code Playgroud)

这个节目打印出来的是什么?它返回true.我回答它总会打印出来,因为我理解自动(和自动联合)拳击.我的印象是,分配整数a = 3将创建一个新的整数(3),以便==将评估参考而不是原始值.

有谁能解释一下?

java autoboxing equivalence

15
推荐指数
4
解决办法
4822
查看次数

如何!=和==运算符在Java中使用整数?

以下代码似乎让我感到困惑,因为它提供了两个不同的输出.代码在jdk 1.7上进行了测试.

public class NotEq {

public static void main(String[] args) {

    ver1();
    System.out.println();
    ver2();
}

public static void ver1() {
    Integer a = 128;
    Integer b = 128;

    if (a == b) {
        System.out.println("Equal Object");
    }

    if (a != b) {
        System.out.println("Different objects");
    }

    if (a.equals(b)) {
        System.out.println("Meaningfully equal.");
    }
}

public static void ver2() {
    Integer i1 = 127;
    Integer i2 = 127;
    if (i1 == i2) {
        System.out.println("Equal Object");
    }

    if (i1 != i2){
        System.out.println("Different objects");
    } …
Run Code Online (Sandbox Code Playgroud)

java integer wrapper operator-keyword equals-operator

11
推荐指数
1
解决办法
8280
查看次数

将 !=/== 与 Character 一起使用是否安全?

==/!=比较时使用安全吗Character

==/!=字符是盒装类型,在比较字符类型时使用是否安全?

  public static void main(String[] args) {

        Character c1 = 'd';
        Character c2 = (char) getInt();

        System.out.println(c1 == c2);
    }

    public static int getInt() {

        return 100;
    }

Run Code Online (Sandbox Code Playgroud)

以下内容按预期工作(正确)。但是,是否存在使用相同值比较字符==会导致错误的情况?(因此,在比较装箱原始类型时我们是否必须使用“.equals()”?

java

11
推荐指数
1
解决办法
542
查看次数

为什么相同的整数值在Java中具有不同的内存地址?

今天是我第一次尝试Java语言.当我尝试这段代码时,我觉得很奇怪:

int a =500;
System.out.println(System.identityHashCode(500));
System.out.println(System.identityHashCode(500));
System.out.println(System.identityHashCode(a));
System.out.println(System.identityHashCode(a));
Run Code Online (Sandbox Code Playgroud)

所有这些结果都不同.但当我将500改为50时,它会变成相同的结果.

为什么?

java memory

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

整数的特定(Java核心)

我在采访中得到了这个问题:

public Integer v1 = 127;
public Integer v2 = 127;
public Integer v3 = 513;
public Integer v4 = 513;

public void operatorEquals(){
    if (v1==v2)
        System.out.println("v1 == v2");
    else throw new RuntimeException("v1 != v2");
    if (v3==v4)
        System.out.println("v3 == v4");
    else throw new RuntimeException("v3 != v4");
}

**Result**: java.lang.RuntimeException: **v3 != v4**
Run Code Online (Sandbox Code Playgroud)

你能解释一下:为什么?我没有任何建议.

java

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