/*首先要知道的常识:
1.关系操作符==:计算"操作数"的 值 之间的关系,结果为true或者false;这操作数指的是所有的基本数据类型以及所有对象;
2.equals():是Object类中的方法,equals()作用和==相同,但是不适用于基本数据类型;
3.自己定义的类可以覆盖Object类中的equals();
*/
//下面来看一个例子:
class Da
{
/*此时a==b和a.equals(b)均为false; 因为a
和 b指向了不同的对象,虽然这两个对象的内容相同;*/
//int c;
//Da(int c){this.c=c;}
//static Da a=new Da(5); //
//static Da b=new Da(5); //
/*此时a==b为false;a.equals(b)为true;前者因为a和b的值不一样,指向了不同的对象;
后者因为Integer覆盖了Object类中的equals(),此时equals()比较的是Integer的对象的内容,也即int值;
*/
//static Integer a=new Integer(5);
//static Integer b=new Integer(5);
/*此时a==b和a.equals(b)均为true;现在问题来是:
在jdk1.5以后,可以使用自动装箱机制,我用的是jdk1.8,那么Integer a=5;是和Integer a = new Integer(5);一样的
那为啥结果就和上面的不一样呢?请高手赐教,多谢了。
*/
static Integer a=5;
static Integer b=5;
public static void main(String[] args)
{
System.out.println(a==b);
System.out.println(a.equals(b));
}
}
java中 Integer a=5;和Integer a = new Integer(5);的区别?请高手赐教。
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
关注 System.out.println(a==b);
这个结果为true,根本原因是java的包装类Integer使用了缓存,对包装类的自动装箱、自动拆箱也是一种语法糖, Java的new Integer操作,当参数值在【-128,127】之间时,new操作返回的对象是有缓存的,你使用的5在这个范围内,所以使用的是ab是同一个对象,但是如果改下:static Integer a=256; static Integer b=256; public static void main(String[] args) { System.out.println(a==b); System.out.println(a.equals(b)); }
那么此时a==b就是false,就不是同一个对象 了。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 6无用
悬赏问题
- ¥15 Power query添加列问题
- ¥50 Kubernetes&Fission&Eleasticsearch
- ¥15 有没有帮写代码做实验仿真的
- ¥15 報錯:Person is not mapped,如何解決?
- ¥30 vmware exsi重置后登不上
- ¥15 c++头文件不能识别CDialog
- ¥15 Excel发现不可读取的内容
- ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题
- ¥20 yolov5自定义Prune报错,如何解决?
- ¥15 电磁场的matlab仿真