Java語言提供了兩種字符串的創(chuàng)建方式:使用String直接量和使用new創(chuàng)建String對象。這兩種方式都可以創(chuàng)建字符串,但是它們的實現(xiàn)方式不同,也有各自的優(yōu)缺點。
//使用String直接量創(chuàng)建字符串 String str1 = "Hello World"; //使用new創(chuàng)建String對象 String str2 = new String("Hello World");
使用String直接量創(chuàng)建字符串時,Java虛擬機會首先在字符串常量池中查找是否有相同的字符串,如果有,則返回該字符串的引用;如果沒有,則在常量池中創(chuàng)建一個新的字符串,并返回該字符串的引用。這種方式的優(yōu)點是創(chuàng)建字符串速度很快,因為虛擬機會對相同的字符串進(jìn)行緩存,可以減少內(nèi)存開銷。但是如果要比較兩個字符串是否相等時,需要使用equals()方法,因為兩個不同的字符串雖然內(nèi)容相同,但是它們在內(nèi)存中的引用不同。
使用new創(chuàng)建String對象時,每次都會在堆內(nèi)存中創(chuàng)建一個新的String對象,即使字符串內(nèi)容相同。這種方式的優(yōu)點是可以使用==運算符比較兩個字符串是否相等,因為它們在內(nèi)存中的引用是不同的。但是創(chuàng)建對象的過程會占用較多的內(nèi)存,并且如果頻繁創(chuàng)建字符串對象,會導(dǎo)致內(nèi)存占用過高。