常見Java面試題 – 第二部分:equals與==

來源:互聯網
上載者:User
英文原文: Java Success

ImportNew註: 本文是ImportNew編譯整理的Java面試題系列文章之一。上一篇是《Java 面試題問答:編譯時間與運行時》。你可以從這裡查看全部的Java面試系列。

Q2.下面的程式碼片段的輸出是什嗎?

12345678 Object s1 = new String("Hello");Object s2 = new String("Hello"); if(s1 == s2) {  System.out.println("s1 and s2 are ==");}else if (s1.equals(s2)) {  System.out.println("s1 and s2 are equals()");}
1  

A2.輸出結果是:

s1 and s2 are equals()

可以用下面這個圖來解釋:

 

因此,上面的問題考察了面試者對”==” 和 “equals( )”在Java對象上如何應用的理解是否正確。前者比較引用,後者則比較對象中真正的值。

接著還可以有下面的問題:

Q.下面程式碼片段的輸出是什嗎?

12345678 Object s1 = "Hello";Object s2 = "Hello"; if (s1 == s2) { System.out.println("s1 and s2 are ==");} else if (s1.equals(s2)) { System.out.println("s1 and s2 are equals()");}

A.答案是:

s1 and s2 are ==

看上去這個答案和對前面一個問題所做的解釋似乎有所違背。事實上,這個例子(或者說,規則)比較特殊,是一個典型的flyweight 模式在字串對象建立中的應用。這個模式通過減少對象的建立來節約記憶體。String對象會建立一個字串池(a pool of string),如果當前準備新建立的字串對象的值在這個池子中已經存在,那麼就不會產生新對象,而是複用池中已有的字串對象。flyweight 模式的精髓就是對象複用。不過,只有採用Object s = “Hello”方式(而非用”new“關鍵字)聲明String對象的時候這個規則才會被應用。

這是一個非常經常被採用的Java面試問題。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.