日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

缓冲池和String池

發布時間:2024/9/27 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 缓冲池和String池 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在內存中虛擬出了一個池子,

在棧內存中有一個x1,他就會指向池中的一個對象,池子的作用是當在出項一個x2是,則會指向池中尋找,看是否有這個對象。緩存的大小是:-128-127,這時一個字節。即一個ASCll表。

?

由方法返回的都在對內存中的。

?

?

package toto.learn1;

?

publicclass StringDemo {

?

??? /**

??? ?* Java為了優化字符串的操作,提供了一個緩沖池

??? ?* 1String str="abc";String str=new String();

??? ?* 2String str=new String("abc");創建了幾個對象(2個或1)

??? ?* 3String str="a"+"b"+"c"+"d";創建了幾個對象

??? ?* 4String s1="a"; Strings2="b"; String s3=s1+s2; s3="ab";

??? ?*/

??? publicstaticvoid main(String[] args) {

?????? // 1、首先會取出池里面有沒有“abc”對象,通過(equals

?????? //找到了,直接返回引用;沒找到,會創建一個對象,緩沖到池里,返回引用

?????? /*String s1="abc";

?????? String s2="abc";

?????? System.out.println(s1==s2);*/??

??????

?????? //2String str=new String("abc");//不管池里有沒有緩沖,都會在堆內存中創建

?????? //一個新的對象,返回引用。此時負責檢查并維護緩沖池。實際上對內存創建的對象是緩沖到池中對象的一個拷貝。

?????? /*

?????? String s1=new String("abc");//創建了兩個對象

?????? String s2=new String("abc");//創建了一個對象

?????? System.out.println(s1==s2);//此時結果為false.

?????? */

?????? //3String str="a"+"b"+"c"+"d";

?????? //編譯器有一個優化功能,并合并已知量(得是已知量),其在編譯階段就合并,

?????? //故上面創建了一個對象。

??????

?????? /**

?????? ?* String s3=s1+s2;實際上通過:、

?????? ?* StringBuilder sb=newStringBuilder();

?????? ?* sb.append(s1);

?????? ?* sb.append(s2);

?????? ?* */

?????? String s1="a";

?????? String s2="b";

?????? String s3=s1+s2;//字符串是不能相加的。

?????? }

??????

}

?

把一個對象存到集合中,這個對象的地址仍然沒變,緩沖池就相當于一個集合。

?

內存中沒有單獨的一片地址表示池。緩沖池相當于一個集合,存放的是對象的地址。存多少個對象,取決于自己定義的池的大小。

?

?

2. 基本數據類型的包裝類

int --> Integer

byte --> Byte

short --> Short

long --> Long

char --> Character

double --> Double

float --> Float

boolean --> Boolean

?

1) Integer x = 1; x = x + 1;? 經歷了什么過程?裝箱à拆箱à裝箱

2) 為了優化,虛擬機為包裝類提供了緩沖池,Integer池的大小 -128~127 一個字節的大小

3) String

/*1. String s = "abc", 虛擬機首先會檢查String池里有沒有"abc"對象(通過equals方法)

?????? // 如果有,直接返回引用,如果沒有,會在池里創建一個“abc”對象,并返回引用

?????? Strings1 = "abc";

?????? Strings2 = "abc";

?????? System.out.println(s1==s2); // result: true

?????? */

??????

?????? /* 2.String str = new String("abc"); 不管緩沖池是否有"abc", 都會在堆內存創建一個"abc"對象,返回引用

?????? // 此時,負責檢查并維護緩沖池,其實堆內存的對象是緩沖池中"abc"對象的一個拷貝

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

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

?????? System.out.println(s1==s2);// result: false

?????? */

??????

?????? /* 3.String s = "a" + "b" + "c" + "d";? java編譯器有個合并已知量的優化功能

?????? // 在編譯階段就把"a" + "b" + "c" + "d" 合并為”abcd“

?????? String s= "a" + "b" + "c" + "d";

??? //? String s = "abcd";

?????? System.out.println(s=="abcd");//result: true

?????? */

??????

?????? /*4.? String s1 = "a"; String s2= "b"; String s3 = s1 + s2;

?????? //String是常量,不能相加的,java如何實現的?

?????? ?StringBuilder sb = new StringBuidler(s1);

?????? ?sb.append(s2);

?????? ?s3 = sb.toString();

?????? ?

?????? ?也就是說實際上s3是方法返回的String對象

?????? ?凡是方法返回的字符串對象都是在堆內存的,并且不負責維護緩沖池

?????? */

?????? ?String s1 = "a";

?????? ?String s2 = "b";

?????? ?String s3 = s1 + s2; // 堆內存的對象

?????? ?

?????? ?System.out.println(s3=="ab");//result: false

?

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的缓冲池和String池的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。