Java中的String s1="Hello"
和String s1=new String("Hello")
之間的區別是什麼?String s1 =「Hello」和String s1 = new String(「Hello」)之間的區別是什麼?
如果String s1="Hello"
和String s2=new String("Hello")
,將s1 == s2
?
Java中的String s1="Hello"
和String s1=new String("Hello")
之間的區別是什麼?String s1 =「Hello」和String s1 = new String(「Hello」)之間的區別是什麼?
如果String s1="Hello"
和String s2=new String("Hello")
,將s1 == s2
?
如果String s1 =「Hello」並且String s2 = new String(「Hello」),那麼s1 == s2?
答案是:否。
因爲,S1和S2是不同的對象,並string
是不可變的。所以,s1 == s2
將是false
和s1.equals(s2)
將是true
。
這裏是距離Joshua Bloch的Effective Java的關於 「)新的String(」 使用的報價:
由於什麼不能做一個極端的例子,此聲明:
的String = new String(「stringette」); // 不要這樣做!
該語句每次執行時都會創建一個新的String實例,並且這些對象創建都不是必需的。字符串構造函數(「stringette」)的參數本身就是一個字符串實例,在功能上與構造函數創建的所有對象完全相同 。如果這個 用法出現在循環或頻繁調用的方法中,則可以毫無用處地創建數百萬個字符串實例。改進的版本是 簡單地執行以下操作:
的String = 「stringette」;
String myStr = "hello";
String myStr1 = "hello";
這些時通過雙等於兩者相比將評估爲true。然而,它們並不相等,而是都指向內存中相同的「文字串」。這從來沒有如何比較一個字符串的內容,所以不要讓這個騙過你。
String myStr = new String("hello");
String myStr1 = new String("hello");
將評估爲false,因爲它們都引用具有不同內存地址的不同對象。
始終始終始終use myStr.equals(myStr1)
比較字符串的內容是否相等時。 還記得==
只比較它們是否引用內存中的同一個對象。
+1相關示例.. –
如果String s3 =「Hello」,則s3 == s1? –
好吧,它會出現,如果他們在那種情況下,但它不是比較他們的方式,我們想比較他們,這是內容。我們希望看看s1和s3中的每個字符是否都是同一個,而不是兩個引用變量是否指向內存中的相同位置。不要習慣於以這種方式比較對象(字符串是一個對象),因爲你會得到錯誤的結果,後來它會混淆你。對象是不透明的(封裝和數據隱藏),因此定義對象內容的內容會有所不同。現在只需使用.equals() – Whoppa
你的問題的回答是否定的,請在下面找到了原因: -
條件s1 == s2將比較內存中現在2個不同位置的內存位置。所以它會變成錯誤的。
那麼'=='運算符匹配引用。由於在這個例子中有2個元素s1和s2,因爲他們有不同的引用/地址,所以輸出是s1 == s2將是錯誤的。但是如果使用'equals()',則輸出將爲真,因爲這些值將進行比較,並且根據問題的值是相同的。 – BIJAY
如果有兩個字符串,即s1和s2,如果String s1 =「Hello」; String s2 =「Hello」;這裏s1 == s2給出了一個真正的輸出。 – BIJAY