Integer类在自动装箱后,用==来做比较时,并不总是像其他类一样比较对象地址,数值较小时,它比较的是对象值。
当数值超过某个临界点时,它才会比较地址。这个临界点是127和-128。
假设有如下代码:
Integer i1 = 127;
Integer i2 = 127;
if (i1 == i2)
System.out.println("i1 == i2");
else
System.out.println("i1 != i2");
那么输出结果是i1 == i2,比较的是对象值。
如果:
Integer i1 = 128;
Integer i2 = 128;
if (i1 == i2)
System.out.println("i1 == i2");
else
System.out.println("i1 != i2");
则会输出i1 != i2,比较的是对象地址。
设计者的思路大概是,用==来进行比较,大概一般都是要比较值,但这种写法是不对的,这样吧,当对象值在一个字节以内时,比较值和比较地址的成本是一样的,那我就给你比较值,但如果值大于一个字节,比较值的成本就大过比较地址了,我就老老实实比较地址吧。
分享到:
相关推荐
Java自动拆装箱是Java SE 5.0引入的一项特性,它极大地方便了开发者在编程过程中的操作,特别是与集合框架的交互。自动拆装箱是指将基本数据类型的值与对应的包装类对象之间进行自动转换的过程。在Java中,有8种基本...
在Java编程语言中,自动装箱(Autoboxing)和自动拆箱(Unboxing)是两个重要的特性,它们简化了基本类型(如int、double等)与对应的包装类(如Integer、Double等)之间的转换过程。这些特性是在Java 5引入的,极大...
Java语言在设计时引入了自动装箱和拆箱机制,以方便开发者在基本类型与它们对应的包装类之间进行转换。这个特性在提高编程效率的同时,也...同时,理解Java自动装箱和拆箱的原理,有助于在编写代码时做出明智的选择。
从Java 5开始,引入了自动装箱和拆箱特性,使得基础数据类型和其包装器类之间的转换更加方便。例如: ```java Integer y = 567; // 自动装箱 y++; // 自动拆箱,自增,再自动装箱 System.out.println("y = " + y); ...
上述代码中,尽管integer1和integer2的值相同,但由于自动装箱,它们实际上是两个不同的Integer对象,所以`==`比较返回false。如果比较的是基础数据类型,那么相同值的变量会被认为是相等的。但如果比较的是包装类...
Java中的自动装箱和拆箱是自J2SE 5.0版本引入的特性,它极大地简化了基本数据类型与其对应的包装类之间的转换过程。基本数据类型包括int、double、boolean等,而包装类如Integer、Double和Boolean分别对应这些基本...
Java自动装箱和拆箱的实现原理是 Java语言的一个重要特性,它使得开发者可以更加方便地使用原始类型和封装类之间的转换,但是同时也容易引发一些疑惑和错误。通过了解自动装箱和拆箱的实现原理,我们可以更好地使用...
在Java编程语言中,自动装箱(Autoboxing)和自动拆箱(Unboxing)是从Java 1.5版本开始引入的一项特性,其目的是简化原始类型(Primitive Types)与它们对应的包装类(Wrapper Classes)之间的转换过程。...
// 自动装箱和拆箱的具体比较 Integer a = 10; // 自动装箱,相当于Integer a = Integer.valueOf(10); int b = a; // 自动拆箱,相当于int b = a.intValue(); ``` #### 四、自动装箱与拆箱的注意事项 尽管自动装箱...
自动拆箱,就是Java自动将封装器(对象)类型转换成基本类型的过程,如将Integer对象转换成int类型值,这个过程叫做拆箱。 自动装箱和拆箱的示例 自动装箱示例: int a = 3; Integer b = a; 自动拆箱示例: ...
### Java中的自动装箱与拆箱详解 #### 引言 在Java开发过程中,开发者经常需要处理各种数据类型之间的转换。对于基本数据类型与包装类之间的转换,Java提供了一个非常便利的功能——自动装箱和自动拆箱。这些功能...
### 自动装箱与拆箱概念 在Java中,自动装箱是指将基本数据类型自动转换为对应的包装类...通过以上分析,我们可以更深入地理解Java中的自动装箱、拆箱及其对对象比较的影响,这对于编写高效且可读性强的代码非常重要。
Java 自动转换是Java编程语言中的一个重要特性,它涉及到类型转换、自动装箱与拆箱、数据类型提升等多个方面。在Java中,自动转换极大地方便了开发人员处理不同类型的数据,提高了代码的可读性和效率。以下是关于...
自动装箱和拆箱从Java 1.5开始引入,目的是将原始类型值转自动地转换成对应的对象。自动装箱与拆箱的机制可以让我们在Java的变量赋值或者是方法调用等情况下使用原始类型或者对象类型更加简单直接。 如果你在Java...
Java语言在设计时引入了许多特性以提升开发效率和代码的可读性,其中自动装箱和注解是两个重要的概念。下面将详细讲解这两个主题,同时也会提及静态导入这一便捷的编程技巧。 **自动装箱(Auto Boxing)** 自动装箱...
自动装箱与拆箱:自动装箱(Autoboxing)指的是自动地将基本数据类型转换为对应的包装类对象;自动拆箱(Unboxing)则是将包装类对象自动转换为基本数据类型。 常用方法:演示如何使用包装类中的这些常见方法。 null...
在Java SE 5.0及以后版本中,Java引入了自动装箱的功能,即可以在不显式调用构造函数的情况下完成这一转换。 **示例代码**: ```java Integer i = 10; // 自动装箱 ``` 这里,`i`是一个`Integer`对象,而不是简单...
`是自动装箱的例子。由于Java会进行优化,对于-128到127之间的整数,Integer.valueOf()方法会从缓存中返回相同的对象引用,因此`num1`和`num2`指向的是同一个对象。然而,`Integer num3 = 200;`和`Integer num4 = ...
学C++的时候,不管是什么操作,基本上都可以知道编译器到底干了啥。... 第二个则对应与x++,先取出x的引用ALOAD 1:x,接着调用intValue方法得到值,然后压栈,+1,再调用valueOf进行装箱操作,这样x的值完成了++