当前位置: 首页 > 面试题库 >

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

寇夜洛
2023-03-14
问题内容

我已经从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
    }
}

上面的程序为第一个print语句提供了输出true,但是应该给出false,因为它是==关系运算符的引用比较。但是第三张印刷品是假的,我不理解这种不一致。

解释非常感谢!


问题答案:

在第一种情况下,两个ij都指向相同的缓存对象。默认情况下,-128和127之间的范围作为Integer对象缓存。我们可以使用JVMarguments



 类似资料:
  • 问题内容: “foo” instanceof String //=> false “foo” instanceof Object //=> false true instanceof Boolean //=> false true instanceof Object //=> false false instanceof Boolean //=> false false instanceof Ob

  • 我有一个大的嵌套对象。我想在JSON字符串中序列化这个对象,但是我只需要包含某些字段。这里的问题是字段可能会非常频繁地更改,我希望以一种可以帮助我轻松包含或排除用于序列化的字段的方式来构建它。 我知道我可以编写很多代码来提取某些字段并“手动”构建JSON。但我想知道,除了指定一个必填字段列表之外,是否还有其他优雅的方法可以实现类似的结果? 例如,我希望在响应中只包含和以下对象结构: Json:

  • 问题内容: 我正在一个JavaScript项目上,只是想知道为什么对象实例不继承和其他方法,而不必调用超类(superobject?)方法。 我看过了MDN文档,实际上有“非标准”属性方法。 但这些已被弃用。为什么要转向方法? 在我看来,类似的东西比更好。对于其他一些Object方法,我也会说同样的话。 问题答案: 这是为了避免发生冲突-通常情况下,对象的问题不具有所需值的属性。 JS中的对象通常

  • 问题内容: 我一直都在看:声明的对象常量使某些键用引号引起来,而另一些则没有。jQuery 1.4.2中的示例: **用引号 将前两个属性键(和 ) 包裹 起来,而其他两个都不用引号引起来的意义是什么? 有什么区别吗? 我一直在摸索ECMAScript 5规范;我所能找到的只是[ 15.12.3节的注6,重点是我的 ]: 注6:一个对象呈现为左括号,后跟零个或多个属性,以逗号分隔,右括号封闭。 属

  • 在JS中,如果我将一个字符串记录到控制台,它是否没有正确显示? 后果 那么为什么显示的是[object],而不是值呢?它就像是在附加字符串的情况下更改类型?

  • 问题内容: 我正在尝试使用实例化对象流: 但是它说它不能转换成。 问题答案: 本类的方法映射s到更多的S,用(到),而不是对象。 通常,所有流的方法都将流的类型映射到自身,并映射到不同的类型。 尝试使用该方法,该方法改为使用(反对)。