Java Wrapper 的比较

Raj*_*vam 5 java inequality equality wrapper primitive-types

public static void main(String[] args) {    
    System.out.println((Integer.valueOf("5000") <= Integer.valueOf("5000")));
    System.out.println((Integer.valueOf("5000") == Integer.valueOf("5000")));       
}
Run Code Online (Sandbox Code Playgroud)

上面的代码分别打印true和false。这是可以理解的,但是为什么false当我们使用==.

但是,当使用<=(小于或等于)时,为什么是答案true?

Ḿűỻ*_*ṩ ᛗ 2

两个对象之间的相等运算符==意味着引用相等;它们必须引用相同的对象,因为它们的内存地址相同。这也适用于所有包装器。

两个对象的值可以“相等”,例如其所有字段都相等,但占用不同的内存地址。Integer 是原始 int 的包装对象。

由于 Integer(以及所有 Wrapper 对象)是一个对象,因此如果引用相同的 Integer 对象,a == b则a, b其中 Integers(不是 int)将返回 true 。a, b

在第二个 中System.out.println,您创建了两个新的 Integer 对象 , (Integer.valueOf("5000"),(Integer.valueOf("5000")它们都包含相同的包装 int 值。但是这些整数占用两个不同的内存地址,因此这两个不能引用相等。因此,由于它们不引用相等,因此==计算结果为 False。

另一方面,一般来说,<=对象中没有定义小于或等于运算符。Line Integer.valueOf("5000") <= Integer.valueOf("5000"),涉及对 Integers 进行“拆箱”,然后比较其 int 值,如果第一个 Integer 字段(int 类型)的值等于第二个 Integer 字段的值,则返回 true。Java 在比较不等式时对 Integer 类执行拆箱。