日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

清晰了解String操作

系統 2080 0

我們來看一段再經典不過的程序:

    
      class StringTest 

{
	public static void main(String[] args) 

	{

		String s=new String("abc");

		String s1="abc";

		String s2=new String("abc");

		System.out.println(s==s1);

		System.out.println(s1==s2);

		System.out.println(s==s2);

	}

}
    
  



大伙兒都知道內存中有兩塊兒存儲區域,分別是棧和堆,加上JAVA字符串是由字符串池管理的,所以,我們的內存可以這樣劃分:



程序開始前所有區域都是空的,現在我們執行第一條語句

?

Java代碼

????? String?s= new ?String( "abc" );??

?

????? JAVA執行流程是這樣的。首先判斷字符串池里有沒有值為"abc"的對象,由于這行語句實在程序第一句,字符串池是空的,所以,它會現在字符串池里構造一個值為"abc"的對象,然后執行new語句后,再把“abc”拷貝到堆里面,關于一個new String構造方法解釋.

?????? 然后s再指向這個對象,如圖:

所以說,執行完這一行代碼后生成了兩個對象,一個是在字符串池里,一個是在堆里

然后看第二句:

Java代碼 復制代碼
  1. String?s1= "abc" ;??

????? ?執行到這一句時又產生了幾個對象?答案是一個也沒產生!執行是這樣的,當程序看到"abc"后,會先到字符串池里找看有沒有"abc",由于執行完第一行語句后字符串池里已經有"abc"了就不再創建,注意這里并沒有new的操作,而是直接常量賦值,所以s1會直接指向這個"abc"而不會在堆里產生新的對象,如圖


程序接著往下走

Java代碼 復制代碼
  1. String?s2= new ?String( "abc" );??

???? ?這次又產生了幾個對象,一個!

????? 程序還是會現在字符串池里找"abc",發現有,就不再字符串池里產生新的對象了,接著執行new操作,記著,在JAVA中,只要出現new操作,一定會有新的對象產生,不管這個對象是否存在多少次,所以它又會在堆里生成一個內容為"abc"的對象,如圖

?

好了,只剩下比較了,注意這里是用的是==,在JAVA中,==永遠是比較兩個引用是否指向同一個對象的,看到上圖,答案不用再揭曉了吧

清晰了解String操作


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 尉犁县| 海门市| 沙田区| 芮城县| 盐边县| 蓬莱市| 廊坊市| 六枝特区| 枣庄市| 汉阴县| 汉川市| 五家渠市| 三门峡市| 三河市| 徐汇区| 孙吴县| 乐清市| 江西省| 府谷县| 沙雅县| 西和县| 阿克苏市| 香港| 木里| 甘泉县| 韶关市| 玉门市| 晋城| 铜山县| 青浦区| 邻水| 普兰店市| 淄博市| 康马县| 徐水县| 阳朔县| 昂仁县| 梓潼县| 滁州市| 兰坪| 宕昌县|