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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

java intern_java String的intern方法

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

我們知道再jvm的運行時內存可以分為堆、方法區、程序計數器、虛擬機棧和本地方法棧。而在方法區中有一個字符串常量池,用來保存字符串這個不可變量。如果我們使用String str=new String("java虛擬機")來new一個string對象,則該對象的實例保存在堆中。如果我們使用String str="java虛擬機"來創建一個字符串,jvm首先會在字符串常量池中創建該String的實例,然后將常量池中該實例的引用返回給str。

new出來的String保存在堆中,如果我們想讓字符串常量池中也保存該string的實例呢?可以使用String.intern()這個方法將字符串復制到常量池中,返回在常量池中的引用。

但是在jdk1.7以后,使用String.intern()方法和之前有一些不同。如果字符串在字符串常量池中沒有出現過,就會在字符串常量池中保存一個引用,指向堆中該字符串的實例。如果字符串在常量池中已經存在了,就返回常量池中的引用。

我們看一下如下的代碼

public static void main(String[] args) {

String str1=new StringBuilder("java").append("虛擬機").toString();//執行完這行代碼后,常量池中會有"java"和"虛擬機",但是不會有"java虛擬機"。

System.out.println(str1.intern()==str1);

String str2=new String("我喜歡java"); //執行完這行代碼后,常量池中會有"我喜歡java"

System.out.println(str2==str2.intern());

}

結果是

image.png

分析

str1指向的實例是在堆中,是由“java”和"虛擬機"拼接成的。執行完第一句代碼后,執行完這句話后,常量池中會有"java"和"虛擬機",但是不會有"java虛擬機"。然后使用str1.intern()會在常量池中保存str1實例的引用,并且返回引用,因此str1.intern()==str1。

而執行完String str2=new String("我喜歡java");后,常量池中會有"我喜歡java",所以在使用str2.intern()返回的就是字符串常量池中的引用,而str2指向的是堆中的引用,因此str2!=str2.intern()。

總結

以上是生活随笔為你收集整理的java intern_java String的intern方法的全部內容,希望文章能夠幫你解決所遇到的問題。

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