Java虛擬機(jī)對于字符串引用,由于在字符串的"+"連接中,有字符串引用存在,而引用的值在程序編譯期是無法確定的,即I Love +s1中的s1無法被編譯器優(yōu)化,只有在程序運(yùn)行期來動態(tài)分配并將連接后的新地址賦給s3和s4。所以上面程序的結(jié)果也就為s3中儲存一個(gè)新地址,s4中儲存另一個(gè)新地址。另外,string類型比較特殊,首先它會在常量池中尋找有沒有這個(gè)值,也就是I Love imooc,如果有,則僅僅在堆內(nèi)存中創(chuàng)建一個(gè)對象否則會創(chuàng)建兩個(gè)對象,首先在常量池中一個(gè),然后拷貝一個(gè)在堆內(nèi)存,當(dāng)然棧內(nèi)存中的變量引用還是指向堆內(nèi)存里面的對象。
2016-12-14
加雙引號的為常量,s1? 為變量,變量加常量所以是新的內(nèi)存空間,常量相加直接調(diào)用。
2017-01-24
Java虛擬機(jī)對于字符串引用,由于在字符串的"+"連接中,有字符串引用存在,而引用的值在程序編譯期是無法確定的,即I Love +s1中的s1無法被編譯器優(yōu)化,只有在程序運(yùn)行期來動態(tài)分配并將連接后的新地址賦給s3和s4。所以上面程序的結(jié)果也就為s3中儲存一個(gè)新地址,s4中儲存另一個(gè)新地址。另外,string類型比較特殊,首先它會在常量池中尋找有沒有這個(gè)值,也就是I Love imooc,如果有,則僅僅在堆內(nèi)存中創(chuàng)建一個(gè)對象否則會創(chuàng)建兩個(gè)對象,首先在常量池中一個(gè),然后拷貝一個(gè)在堆內(nèi)存,當(dāng)然棧內(nèi)存中的變量引用還是指向堆內(nèi)存里面的對象。
2017-01-09
告訴你把,new是重新開辟內(nèi)存空間,2個(gè)new開辟了2個(gè)內(nèi)存空間,就相當(dāng)于,前面超市有面賣,后面超市也有面賣。你能說2家超市相等嗎
2016-12-12
String 對象創(chuàng)建后則不能被修改,是不可變的,所謂的修改其實(shí)是創(chuàng)建了新的對象,所指向的內(nèi)存空間不同.