老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

JVM內存分配及String類的常用方法解析

本篇內容主要講解“JVM內存分配及String類的常用方法解析”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“JVM內存分配及String類的常用方法解析”吧!

港北網站建設公司創新互聯公司,港北網站設計制作,有大型網站制作公司豐富經驗。已為港北上1000+提供企業網站建設服務。企業網站搭建\外貿網站制作要多少錢,請找那個售后服務好的港北做網站的公司定做!

一,JVM內存分配和常量池

區域名稱的說明:

1.1,方法區:

屬于數據共享內存區域,存儲已被虛擬機加載的類信息、常量、靜態變量、即時編譯器編譯后的代碼等數據。

1.2,虛擬機棧

虛擬機棧就是我們通常說的棧,是Java執行方法的內存模型,每當執行一次方法時,都會創建一個棧幀。把棧幀壓入棧,當Java方法調用時返回正常的結果或者捕獲異常時,棧幀出棧。

棧幀:棧幀存儲方法的相關信息,包含局部變量數表、返回值、操作數棧、動態鏈接。

1.3,本地方法棧

從功能上來說與虛擬機棧類似,但是虛擬機棧執行的是字節碼,而本地方法棧調用的是Native方法,并且它是線程獨享的。

1.4,程序計數器

程序計數器是線程獨享的,它是記錄當前線程執行的字節碼行號。在多線程執行時,CPU會來回在線程之間進行切換,那么當再次回到一條線程時,是如何得知線程的存儲單元及執行指令。而程序計數器便會進行存儲下一條存儲單元的地址,執行完畢后程序計數器自動加 1 ,以此循環直到程序結束為止。

1.5,堆

說到堆這個概念想必都不陌生,它是內存中的重要角色。它主要是用來存儲被創建出來的對象,通過關鍵字new實例出來的,是所有線程共享的一塊最大的區域。

==特別注意:在JDK1.7及以后,常量池移動到堆內存中。==

堆還包括一個==常量池==,用來存儲編譯期間生成的==字面量和符號==引用。這部分內容在類被加載后,都會存儲到方法區中。同時,運行時產生的新常量也可以被放入常量池中,比如 String 類中的 intern() 方法產生的常量。

常量池就是這個類型用到的常量的一個有序集合。包括直接常量(基本類型,String)和對其他類型、方法、字段的符號引用。

二,常量池

2.1,什么是常量:

常量是指被final修飾的變量,值一旦確定就無法改變。

final可以修飾靜態變量、方法、實例變量和局部變量。

常量池分為兩種形式:靜態常量池和運行時常量池

2.2,靜態常量池

即*.class文件中的常量池,class文件中的常量池不僅僅包含字符串(數字)字面量,還包含類、方法的信息,占用class文件絕大部分空間。這種常量池用于存放字面量和符號引用量。

2.3,運行時常量池

指JVM虛擬機在完成類裝載操作后,將class文件中的常量池載入到內存中,并保存在方法區中,我們常說的常量池,就是指方法區中的運行時常量池。同樣運行時常量池一個重要的特征就是具有動態性,指并不需要常量只有在編譯期才會產生,在運行期也會將新的常量保存到常量池中,如String類中的intern()方法。

三,== 和equals

3.1,兩者之間區邊

==:

對于基本類型來說:==表示數值的比較

對于引用類型來說:==表示地址值的比較

equals:

比較的是兩者之間值是否相等,但是Java中的類都是直接或者間接繼承Object類,而equals不也例外。其實在equals源碼中也是使用==進行比較的,如下源碼:

![](/upload/otherpic59/1655301-20190902223856542-1095893842.png)

那么問題來了,這和==又有什么區別呢?

上面說到equals也是繼承自java.lang.Object,因此可以對equals進行重寫來定義我們自己的比較方式。

請參看以下代碼:

String str1 = "abc"; String str2 = "abc"; char[] strArray = {'a','b','c'}; String str3 = new String(strArray); String str4 = "abc"; System.out.println(str1 == str2);  System.out.println(str1 == str3);  System.out.println(str2 == str3);  System.out.println(str4.equals(str1));

以上運行結果為:

truefalsefalsetrue

接下來我們依次分析上面的結果:

1,str1與str2比較的是字符串對象地址,因為它們的值是相同的,所以地址值也是相同的。

2,str3是new出來的示例對象,在堆內存中會開辟一塊新的內存地址,它并不在常量池中。所以返回結果為false。

3,同理str2與str3比較也是一樣的結果。

4,equals比較的是值是否相同,所以返回的結果為true。

如圖所示:

四,String常用方法

首先聲明字符串:

String str1 = "abc";

4.1,int length()

int length = str1.length(); System.out.println(length);

4.2,char charAt(值)

String str= "abc";char c = str.charAt(1); System.out.println(c);

4.3,char toCharArray()

String str= "abc";char c[] = str.toCharArray(); for (int i = 0; i < c.length; i++) { System.out.println("轉為數組輸出:" + c[i]);}

4.4,int indexOf("字符"); int lastIndexOf("字符")

String str="axcdefgabc";int a1 = str.indexOf("a"); int a2 = str.indexOf("x", 2);int a3 = str.lastIndexOf("c"); System.out.println("你的位置為:" + a1); System.out.println("為的位置為:" + a2);System.out.println("點最后出現的位置為:" + a3);

4.5,字符串大小寫轉換

toUpperCase(); 轉換成大寫 toLowerCase();轉換成小寫

String str = "hello world";String str1 = "HELLO WORD";System.out.println("將字符串轉大寫為:" + str.toUpperCase());System.out.println("將字符串轉換成小寫為:" + str1.toLowerCase());

4.6,String[] split("字符")

String str = "abc,def,123";String[] arr1 = str.split(",");

4.7,boolean equals(Object anObject)

String str = "abc"; String str1= "123";  if(str.equals(str1)) {  System.out.println("相等");  }  else{ System.out.println("不相等");  }

4.8,String trim()

String str = " abc "; System.out.println("去掉左右空格后:" + str.trim());

4.9,字符串替換

String replace(char oldChar,char newChar) String replaceAll(String,String)將某個內容全部替換成指定內容

String repalceFirst(String,String)將第一次出現的某個內容替換成指定的內容

String str = "abcdefgabdc"; System.out.println("替換:" + str.replace("abc", "123")); System.out.println("替換全部:" + str.replaceAll("ab", "12")); System.out.println("替換第一次出現:" + str.repalceFirst("a", "a"));

4.10,String substring(int beginIndex,int endIndex)

String str = "abcdefg";  // 截取0-3個位置的內容, 不含3  System.out.println("截取后的字符為:" + str.substring(0, 3)); // 從第3個位置開始截取, 含2 System.out.println("截取后字符為:" + str.substring(2));

4.11,boolean equalsIgnoreCase(String)

String str = "ABC";String str1 = "abc";if(str.equalsIgnoreCase(str1)){ System.out.println("相等");}else{ System.out.println("不相等");}

4.12,boolean contains(String)

String str = "ABCDEF";String str1 = "ABC";if(str.contains(str1)){ System.out.println("str內容中包含ABC");}else{ System.out.println("str內容中不包含ABC");}

五,總結

1,對于JVM內存的分配,在jdk6中存在方法區,jdk8中便沒有方法區,改成元區域。

2,jdk6中常量池存在方法區中,jdk7以后常量池移動到堆中。

到此,相信大家對“JVM內存分配及String類的常用方法解析”有了更深的了解,不妨來實際操作一番吧!這里是創新互聯網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!


網頁題目:JVM內存分配及String類的常用方法解析
本文地址:http://www.xueling.net.cn/article/jdisej.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 美女一级毛片免费观看 | 日韩欧美一区二区久久婷婷 | 久久水蜜桃亚洲av无码精品麻豆 | 亚洲人和日本人hd | 韩国19禁无遮挡啪啪无码网站 | 久久久久久国产精品免费免费男同 | 欧美污网站 | 色欲av久久无码影院色戒 | 久草视频在线免费看 | 亚洲三及 | 小柔在教室轮流澡到高潮视频 | 中文字幕一区二区在线播放 | 色视频在线免费看 | 国产成人综合在线 | 93精品国产乱码久久久 | 亚洲字幕成人中文在线观看 | 国产91免费看| 午夜激情在线视频 | 成人午夜视屏 | 亚洲精品wwwww| 久久久麻豆 | 精品欧美色视频网站在线观看 | www.久草| 国产做a∨在线视频播放 | 爱爱天堂 | 超碰CAO已满18进入离开 | 国产黄色一级片 | 一个人看的视频www在线观看 | 日本大骚B视频在线 | 欧美日韩免费一久久亚洲色WWW成人小说 | 久草在线新视觉 | 四虎影视8848 | 国产字幕在线看 | 在线观看日本精品 | 日本在线不卡一区 | 无码精品AV久久久奶水小说 | 久草在线视频精品 | www.成人网.com| 无码99久热这里只有精品视频在线 | 成人性视频在线 | 成人欧美在线视频 |