<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
不是。
Java 中的基本資料型別只有 8
個 :byte、short、int、long、float、double、char、boolean
;除了基本型別,剩下的都是參照型別,Java 5 以後引入的列舉型別也算是一種比較特殊的參照型別。
2
個位元組;字串常數佔若干個位元組(至少一個字元結束標誌) (注意: char 在Java中佔兩個位元組)。字串常數池:jvm為了提升效能和減少記憶體開銷,避免字元的重複建立,其維護了一塊特殊的記憶體空間,即字串常數池。當需要使用字串時,先去字串常數池中檢視該字串是否已經存在,如果存在,則可以直接使用,如果不存在,初始化,並將該字串放入字串常數池中。
所處位置說明
1個或者2個
"aaa"
字串常數了,那麼此時會在堆中通過 new String()方法
建立 1
個字串物件。"aaa"
字串常數了,此時會建立 2
個物件。首先 "aaa"
該表示式會檢視字串常數池中是否含有 "aaa"
常數,如果沒有的話,那麼在字串常數池中就會生成一個值為 "aaa"
的字串常數,然後再在堆中通過 new String()方法
建立一個值為 "aaa"
的物件。你學 Java
的別這個高頻知識點都不知道呀,不知道的趕緊偷摸補一下。
在解析這個問題之前,我們先來做個題目:
public class Test { public static void main(String[] args) { String s = new String("2"); s.intern(); String s1 = "2"; System.out.println(s == s1); String s3 = new String("3") + new String("3"); s3.intern(); String s4 = "33"; System.out.println(s3 == s4); } }
輸出結果
//jdk6
false
false
//jdk7
false
true
intern
方法在JDK1.6以前 和 JDK1.7以後有不同的處理:
intern
的處理是 先判斷字串常數是否在字串常數池中,如果存在直接返回該常數,如果沒有找到,則將該字串常數加入到字串常數區,也就是在字串常數區建立該常數;intern
的處理是 先判斷字串常數是否在字串常數池中,如果存在直接返回該常數,如果沒有找到,說明該字串常數在堆中,則處理是把堆區該物件的參照加入到字串常數池中,以後別人拿到的是該字串常數的參照,實際存在堆中。可變與不可變
String
// 原始碼 private final char value[];
String
類中使用字元陣列儲存字串,因為有 「final」
修飾符,所以 String
物件是不可變的。對於已經存在的 String
物件的修改都是重新建立一個新的物件,然後把新的值儲存進去。
StringBuffer
和 StringBuilder
// 原始碼 char[] value;
StringBuffer
和 StringBuilder
都繼承自 AbstractStringBuilder
類,在 AbstractStringBuilder
中也是使用字元陣列儲存字串,這兩種物件都是可變的。
是否多執行緒安全
String
中的物件是不可變的,也就可以理解為常數,顯然執行緒安全。StringBuilder
是非執行緒安全的。StringBuffer
對方法加了同步鎖或者對呼叫的方法加了同步鎖,所以是執行緒安全的。// StringBuffer 的追加操作 public synchronized StringBuffer append(StringBuffer sb) { toStringCache = null; super.append(sb); return this; }
效能
String
型別進行改變的時候,都會生成一個新的 String
物件,然後將指標指向新的 String
物件。StringBuffer
每次都會對 StringBuffer
物件本身進行操作,而不是生成新的物件並改變物件參照。相同情況下使用 StringBuilder
相比使用 StringBuffer
僅能獲得 10%~15% 左右的效能提升,但卻要冒多執行緒不安全的風險。URL
,檔案路徑path
,反射機制所需要的String
引數。其不可變性可以保證連線的安全性。如果字串是可變的,駭客就有可能改變字串指向物件的值,那麼會引起很嚴重的安全問題。String
是不可變的,保證了hashcode
的唯一性,於是在建立物件時其hashcode
就可以放心的快取了,不需要重新計算。這也就是Map
喜歡將String
作為Key
的原因。到此這篇關於Java 關於String字串原理上的問題的文章就介紹到這了,更多相關Java String內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45