1. 程式人生 > >String s="a"+"b"+"c"+"e" 總共建立了幾個物件?

String s="a"+"b"+"c"+"e" 總共建立了幾個物件?

 問:String s="a"+"b"+"c"+"e" 總共建立了幾個物件 ?

答案:1個

  當我看到這個問題的時候,我的答案是錯的,當我查閱資料後最終確認答案是1個。然後經過了大量的測試,最終答案是1個物件。

測試:

String s1="a";
String s2=s1+"b";
String s3="a"+"b";
System.out.println(s2=="ab");
System.out.println(s3=="ab");

第一條語句列印的結果為false,第二條語句列印的結果為true,這說明javac編譯可以對字串常量直接相加的表示式進行優化,不必要等到執行期再去進行加法運算處理,而是在編譯時去掉其中的加號,直接將其編譯成一個這些常量相連的結果。

題目中的第一行程式碼被編譯器在編譯時優化後,相當於直接定義了一個“abcd”的字串,所以,上面的程式碼應該只建立了一個String物件。寫如下兩行程式碼:

 String s="a"+"b"+"c"+"d";
System.out.println(s=="abcd");

最終列印的結果是true。

String a=new String("xyz");

例如這種形式建立一個String物件,最有代表性講解String物件的建立過程。
答案是:建立兩個或者1個物件。

當JVM虛擬機器看到abc的時候,會去字串常量池尋找有沒有這個字串,如果沒有則建立儲存在常量池中,如果有則直接用即可。兩個或一個,”xyz”對應一個物件,這個物件放在字串常量緩衝區,常量”xyz”不管出現多少遍,都是緩衝區中的那一個。New String 每寫一遍,就建立一個新的物件,它依據那個常量”xyz”物件的內容來創建出一個新 String 物件。如果以前就用過’xyz’,這句代表就不會建立”xyz”自己了,直接從緩衝區拿。
象,最有代表性講解String物件的建立過程。

當JVM虛擬機器看到abc的時候,會去字串常量池尋找有沒有這個字串,如果沒有則建立儲存在常量池中,如果有則直接用即可,就不會重新建立了。

相關推薦

String s="a"+"b"+"c"+"e" 總共建立物件

 問:String s="a"+"b"+"c"+"e" 總共建立了幾個物件 ? 答案:1個   當我看到這個問題的時候,我的答案是錯的,當我查閱資料後最終確認答案是1個。然後經過了大量的測試,最終答案

String s = "a"+"b"+"c"+"d"共建立多少物件

String s1 = "a"; String s2 = s1+"b"; String s3 = "a"+"b"; System.out.println(s2=="ab"); System.out.println(s3=="ab"); 輸出結果為fals

String str = "a"+"b"+"c"+"d";一共建立物件

       前一段時間我參加了我們學校的招聘會,然後有個面試人員就問了我String str = "a"+"b"+"c"+"d"共建立了幾個物件。平時我知道String型別的字串可以疊加,但這個底層原理卻有些模糊。當時就想這是字串的疊加啊,肯定只建立了一個物件。信心滿滿的

java中字串基本知識 String s=new String("abc")建立物件?

本文轉載自http://www.cnblogs.com/ydpvictor/archive/2012/09/09/2677260.html String s=new String("abc")建立了幾個物件? String str=new String("abc"); &nb

String s=new String("abc")建立物件?

String str=new String("abc");   緊接著這段程式碼之後的往往是這個問題,那就是這行程式碼究竟建立了幾個String物件呢? 相信大家對這道題並不陌生,答案也是眾所周知的,2個。 接下來我們就從這道題展開,一起回顧一下與建立String物件

Java:String s=new String("abc")建立物件?

String str=new String("abc");   緊接著這段程式碼之後的往往是這個問題,那就是這行程式碼究竟建立了幾個String物件呢? 相信大家對這道題並不陌生,答案也是眾所周知的,2個。 接下來我們就從這道題展開,一起回顧一下與建立String物件相關的一

String s =new String()分析堆與棧 建立物件

轉載自 分享最終編輯 tanzhimei393先定義S String str1 = “abc”; System.out.println(str1 == “abc”); 步驟: 1) 棧中開闢一塊空間存放引用str1, 2) String池中開

String str = new String("abc")究竟建立物件

先給出答案:兩個。(如果原來常量池中沒有"abc")   String是一個特殊的包裝類資料。即可以用String str = new String("abc");的形式來建立,也可以用String str = "abc";的形式來建立 String str = "abc"建立

String str = new String("abc")究竟建立物件

先給出答案:兩個。(如果原來常量池中沒有"abc") String是一個特殊的包裝類資料。即可以用String str = new String("abc");的形式來建立,也可以用String str = "abc";的形式來建立 String str = "abc

new String(“abc”)建立物件

String a = “abc”; String b = new String("abc"); 這兩種宣告方法得到的String是不一樣的,第一種宣告方法得到的String是儲存在String常量池裡面的,而第二種方式的宣告很明顯是正常的建立一個物件的使用方法,所以儲存在

new String建立物件

String str = new String(“abc”)  到底建立了幾個物件? 首先String str是定義了一個字串變數,並未產生物件,=不產生物件,那麼只有後面的new String("abc")了。把它拆分成"abc"和new String(),首先在字串常量

Java學習筆記 (十三) String究竟建立物件 以及String的intern方法

String究竟建立了幾個物件 看程式碼: 例 1、 public static void main(String[] args) { String s3 = "天道酬勤"; String s4 =new

面試題之String str = new String("abc"); 建立物件

今天去面試的時候碰到了這個問題:String str = new String("abc"); 建立了幾個物件,回來自己研究並查閱資料才發現答錯了。。 網上的爭論不少,有的說是兩個,答案應該是:兩個或一個 理由解釋如下: 都瞭解java 的字串常量緩衝區(字串池,字串常量池

深入 -- 雙引號字串加號(+)拼接 建立物件

雙引號字串加號(+)拼接 建立了幾個物件?結論先行:雙引號字串 加號(+) 拼接,不論多少,只建立了一個物件。昨天看到一個題目,挺有意思的。大意是:String a = "1"+"2"+"3"+"4";建立了幾個物件??我當時第一反應是1個物件。為什麼呢?因為 雙引號字串 直

別再問我 new 字串建立物件!我來證明給你看!

我想所有 Java 程式設計師都曾被這個 new String 的問題困擾過,這是一道高頻的 Java 面試題,但可惜的是網上眾說紛紜,竟然找不到標準的答案。有人說建立了 1 個物件,也有人說建立了 2 個物件,還有人說可能建立了 1 個或 2 個物件,但誰都沒有拿出幹掉對方的證據,這就讓我們這幫吃瓜群眾們陷

下面這條語句一共建立多少物件String s="a"+"b"+"c"+"d";

最近看到許多類似的帖子,大致意思如下: 問題1: String s = “a” + “b” + “c” + “d” + “e”; 問此語句共建立了幾個物件? 答:就建立了一個 解析:String s = “a” + “b” + “c” + “d” + “e”; 賦值符號右邊的"a"

2016ACM/ICPC亞洲區瀋陽站 - A/B/C/E/G/H/I - (Undone)

連結:傳送門 A - Thickest Burger - [簽到水題] ACM ICPC is launching a thick burger. The thickness (or the height) of a piece of club steak is A (1 ≤ A ≤ 100). Th

流水線之1乘法器實現S=a*b*c*d(指兩暫存器之間只有一個乘法器)

module cy4(input[3:0] a,b,c,d, input vld_in,//輸入有效指示訊號 input clk,rst_n, output reg[15:0] dout, output re

869】 A B C E 【組合數打表】

A The Artful Expedient Rock… Paper! After Karen have found the deterministic winning (losing?) strategy for rock-paper-scissors,

Codeforces Round #319 (Div. 2)(A,B,C,E)

Codeforces Round #319 (Div. 2) A.Multiplication Table 題意: 求m在n*n的加法表中出現了幾次 思路: 列舉1到n,累計能整除m的情況。 程式碼: /* * @aut