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

Java包装器相等性测试

史朗
2023-03-14
问题内容
  public class WrapperTest {

    public static void main(String[] args) {

        Integer i = 100;
        Integer j = 100;

        if(i == j)
            System.out.println("same");
        else
            System.out.println("not same");
    }

   }

上面的代码给出的输出same运行时,但是,如果我们改变的值i,并j以1000的输出变为not same。在为SCJP进行准备时,需要弄清楚这个概念。有人可以解释这种行为。谢谢。


问题答案:

在Java中,-128至127(含)之间的整数通常由相同的Integer对象实例表示。这可以通过使用称为IntegerCache的内部类(包含在Integer类中,并在例如调用Integer.valueOf()时或在自动装箱期间使用)来处理:

private static class IntegerCache {
    private IntegerCache(){}

    static final Integer cache[] = new Integer[-(-128) + 127 + 1];

    static {
        for(int i = 0; i < cache.length; i++)
            cache[i] = new Integer(i - 128);
    }
}

另请参阅:http
:
//www.owasp.org/index.php/Java_gotchas



 类似资料:
  • 问题内容: 为什么下面的代码打印? 问题答案: 为什么下面的代码打印? 因为执行比较 浅 。由于数组从中继承其-method ,将对内部数组执行同一性比较,这将失败,因为和均未引用 相同的 数组。 如果更改为它将按预期打印。

  • 问题内容: 是否有任何的java utils的,允许检查对象平等,不受 平等 覆盖?由于某些原因,我不想为类提供equals方法。我在单元测试中需要类似 SomeUtils.equals(a,b)之 类的东西 , 它比较所有对象字段(我想是通过反射)。 问题答案: 您可以在Apache Commons EqualsBuilder中使用

  • 我在面试中被问到以下问题 它们将在哪个内存中创建? 根据我的理解 对于 原始数据类型进入堆栈内存,并且 对于 包装类进入堆内存的整数 请帮助正确理解?

  • 相等性 当你要实现相等性的时候记住这个约定:你需要同时实现isEqual 和 hash方法。如果两个对象是被isEqual认为相等的,它们的 hash 方法需要返回一样的值。但是如果 hash 返回一样的值,并不能确保他们相等。 这个约定是因为当被存储在集合(如 NSDictionary 和 NSSet 在底层使用 hash 表数据的数据结构)的时候,如何查找这些对象。 @implementati

  • 本文向大家介绍Java Float包装器类,包括了Java Float包装器类的使用技巧和注意事项,需要的朋友参考一下 Float是提供的包装类,用于包装float基本值。 让我们创建一个带有float原语的Float对象。 现在让我们从字符串创建一个Float对象。 下面的示例显示了上面讨论的两种输出方法。 示例 输出结果

  • 问题内容: 假设我有一个单元测试,想要比较两个复数对象是否相等。这些对象包含许多其他深层嵌套的对象。所有对象的类都有正确定义的方法。 这并不困难: 麻烦的是,如果对象不相等,那么您得到的只是一个失败,没有迹象表明对象图的哪一部分不匹配。调试它可能会很痛苦且令人沮丧。 我当前的方法是确保一切都实现了,然后像这样比较相等性: 由于像Eclipse这样的IDE具有一个特殊的可视化比较器,用于显示失败测试