Java堆与栈内存分配及String小记(2)

三、 ==   内存地址比对

String str1 = "abc";
String str2 = "abc";
System.out.println(str1==str2); //true    str1和str2同时指向 栈内存 中同一个内存空间

String str3 = "abc";
String str4 = new String("abc") ;

System.out.println(str3 == str4);   //flase str3值在栈内存中,str4值在堆内存中


String hello = "hello" ;

String hel = "hel" ;

String lo = "lo" ;

System.out.println(hello == "hel" + "lo") ; //true

//两个常量相加,先检测栈内存中是否有hello如有有,指向已有的栈中的hello空间

System.out.println(hello == "hel" + lo) ;   //flase

System.out.println(hello == hel + lo) ;     //flase

//lo是在常量池中,不检查栈内存,在堆中产生一个新的hello


四、 equals 值进行比对

public boolean equals(Object anObject)

将此字符串与指定的对象比较。当且仅当该参数不为 null,并且是与此对象表示相同字符序列的 String 对象时,结果才为 true。

String str5 = "abc";
String str6 = new String("abc") ;

System.out.println(str5.equals(str6));   //true   str5的值str6的值比对

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwpdxs.html