java jvm-"=="和equal,堆和栈的区别和联系

java中的”==”和equal都是用于俩个变量的比较
java中的 “==”:用于比较俩个变量的引用地址
java中的”equal”:用于比较俩个变量的内容

java堆和栈都是内存
java的堆:用于存放具体对象的实例和数组,java基础类型的字面值等
java的栈:用于存放java堆中对象实例,数组,基础数据类型的引用变量等

例如 : int a = 3
3是基础数据类型字面值,存放于堆中,a是基础数据类型的引用变量,存放于栈中。堆中的基础数据类型可以数据可以用于共享。
例如: int a = 3 ; int b = 3 ;
当执行a = 3时,会在堆中查找是否有3的字面值,如果没有则创建,然后在栈中,a引用3。当执行b = 3时,在堆中发现了3的字面值,所有就直接去引用,不需要再创建,所以:

System.out.println(a == b); //true 地址相同

对于用new创建的对象,都会直接在堆中直接创建对象,然后栈中的变量直接引用
例如:Integer aa = new Integer(3) ;Integer bb = new Integer(3);
执行这俩个都会直接在堆中创建对象,然后aa,bb变量引用,没有共享对象实例Integer3,所以:

System.out.println(a == b); //false 地址不同
System.out.println(a.equals(b)); //true内容相同

如果不是new,即使是封装类型,也可以在堆中共享数据,例如

String c = "abc";
String d = "abc";
System.out.println(c == d); //true地址相同
System.out.println(c.equal(d)); //true 内容相同

String cc = new String("def");
String dd = new String("def");
System.out.println(cc == dd); //false地址不同
System.out.println(cc.equal(dd)); //true 内容相同

这里写图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值