-------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流>------
关于程序创建新对象的问题。
先看下面的程序:
结果是什么呢?
结果是:
false true false true
下面解释一下原因:
在内存中存储数据的地方分为两部分:堆和栈。
一、String str1=”123” 是在栈中创建对象“123”。
不过在创建之前会先检查栈中是否已经存在对象“123”,如果没有,将对象存在栈中,如果有,则将对象的引用存在str1中。所以,当程序运行到Stringstr3=”123”时,对象已经存在,直接将其引用存到str3中。
二、Stringstr2=new String(“123”) 是在堆中创建对象
无论堆中是否已经存在对象“123”,new 都会新开辟内存用来存储对象。
三、equanls()方法是判断对象的内容是否相同,==是判断引用是否相同,即地址是否相同。而堆和栈在不同地方,结果肯定为false.。