欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

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

来源: javaer 分享于  点击 43505 次 点评:108

java jvm-"=="和equal,堆和栈的区别和联系,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 内容相同

相关文章

    暂无相关文章
相关栏目:

用户点评