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

短命女 2022-07-24 11:30 317阅读 0赞

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的字面值,所有就直接去引用,不需要再创建,所以:

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

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

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

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

  1. String c = "abc";
  2. String d = "abc";
  3. System.out.println(c == d); //true地址相同
  4. System.out.println(c.equal(d)); //true 内容相同
  5. String cc = new String("def");
  6. String dd = new String("def");
  7. System.out.println(cc == dd); //false地址不同
  8. System.out.println(cc.equal(dd)); //true 内容相同

这里写图片描述

发表评论

表情:
评论列表 (有 0 条评论,317人围观)

还没有评论,来说两句吧...

相关阅读

    相关 java jvm区别

    一个人开始学习Java或者其他编程语言的时候,会接触到堆和栈,由于一开始没有明确清晰的说明解释,很多人会产生很多疑问,什么是堆,什么是栈,堆和栈有什么区别?更糟糕的是,J...

    相关 ==equals区别联系

      > 1)对于==,比较的是值是否相等 > > 如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等; > > 如果作用于引用类型的变量,则比较的是所指向的