/*首先要知道的常识:
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 stata安慰剂检验作图但是真实值不出现在图上
- ¥15 c程序不知道为什么得不到结果
- ¥40 复杂的限制性的商函数处理
- ¥15 程序不包含适用于入口点的静态Main方法
- ¥15 素材场景中光线烘焙后灯光失效
- ¥15 请教一下各位,为什么我这个没有实现模拟点击
- ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
- ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
- ¥20 有关区间dp的问题求解
- ¥15 多电路系统共用电源的串扰问题