1. 程式人生 > >關於java中String的一點理解

關於java中String的一點理解

struct 類型 println ref data create class static 就是

??String類是java的最基本類之中的一個,非常好的掌握它的原理非常是必要的!

? 1、String的Final類型的。是不可繼承 的。final類默認的方法都為final類型,保證了方法不能被重載。成員變量不影響
? 2、String的本質就是char[] 而且其值是不可改變的
? 3、String str = "abc"是一種特殊的創建方式,"abc"存在常量區,str僅僅是對其的引用
? 4、String能夠通過+串聯。形成一個新的對象
? 5、java執行時會維護一個String Pool。用來存放程序執行產生的字符串,而且裏面的字符串不會反復

? 6、創建字符串的方式非常多,歸納起來有三類:
???? 其一。使用newkeyword創建字符串。比方String s1 = new String("abc");
??? ?其二,直接指定。

比方String s2 = "abc";
???? 其三,使用串聯生成新的字符串。比方String s3 = "ab" + "c";?
?

public class MyString {
	public static void main(String[] args) {
		//關於String堆棧分析
	 
		String str1 = "abc";
		System.out.println("abc" == str1);
		/*1、在棧上分配內存存放str1
		  2、String池中開辟一塊空間。存放String常量"abc";
		  3、str1指向String池中的"abc";
		  4、輸出true	
		  */
		
		String str2 = new String("abc");
		System.out.println(str1 == str2);
		/*1、棧上分配內存存放str2
		  2、此時的"abc"已經存在,然後將"abc"的引用傳給String的構造函數。在堆上創建一個新的String對象
		   	then the JVM still arranges for "abc" to be in that pool, and still
			provides a reference to it, but that reference is then passed into a
			constructor to create a NEW String object that‘s NOT in the pool and
			copies the first one. It‘s that second String object which ends up
			being assigned to the reference
		  3、str2指向在堆上的新創建的對象。
		  4、輸出false		
		  */
		
		String str3 = "a"+"bc";
		System.out.println("abc" == str3);
		/*1、棧上分配內存存放str3
		  2、依據編譯器合並已知量的優化功能,池中開辟一塊空間,存放合並後的String常量"abc" 
		  3、str3指向在堆上的"abc"’
		  4、輸出true		
		 */
		
		String str4 = "a";
		String str5 = "bc";
		String str6 =str4+str5;
		System.out.println("abc" == str6);
		/*1) 棧中開辟一塊中間存放引用s1,s1指向池中String常量"a"。 
		2) 棧中開辟一塊中間存放引用s2。s2指向池中String常量"b", 
		3) 棧中開辟一塊中間存放引用str5, 
		4) s1 + s2通過StringBuilder的最後一步toString()方法還原一個新的String對象"ab",因此堆中開辟一塊空間存放此對象, 
		5) 引用str6指向堆中(s1 + s2)所還原的新String對象, 
		6) str6指向的對象在堆中,而常量"ab"在池中,輸出為false
		 */
		
		String str7 = new String("abc");
		String str8 = new String("abc");
		if(str7 == str8){
			System.out.println("str7 等於str8");
		}else{
			System.out.println("str7 不等於str8");
		}	
		//輸出str7 不等於str8
	}
}


?

關於java中String的一點理解