我也是個小白,理解的可能有誤,各位倘若看到一定要帶思考的去看。
一、關於基本類型與引用類型
1.基本類型:
全在 棧空間:名字--具體值
整型:byte short int long
浮點型:float double
邏輯型:boolean
字符型:char
2.引用類型: 棧空間:名字--地址(用於在堆空間尋找) 和 堆空間:具體值
類、接口、數組
二、創建字符串的兩種方式
1.字面量賦值方式 String a = "ttt";
該種直接賦值的方法,JVM會去字符串常量池(String對象不可變)中尋找是否有equals("ttt")的String對象,如果有,就把該對象在字符串常量池中"ttt"的引用復制給字符串變量a,如若沒有,就在堆中新建一個對象,同時把引用駐留在字符串常量池中,再把引用賦給字符串變量str。
2.new關鍵字創建新對象 String b = new String("ttt");
利用new來創建字符串時,無論字符串常量池中是否有與當前值相同的對象引用,都會在堆中新開辟一塊內存,創建一個新的對象。
注:字符串無法被修改(String對象不可變):
eg:
String str1 = new String("ttttttt");
str1 = "yyyyyyy";
對str1重新賦值后 ttttttt這個String對象在堆空間中並沒有消失
即在堆空間中新建一個字符串yyyyyy 不再指向ttttttt 而是重新指向yyyyyyyy的首地址
三、關於字符串的比較
String str1 = "ttt";
String str2 = "ttt";
String str3 = new String("ttt");
三個字符串變量的創建過程如下
1.equals:值比較
2.==:地址(引用)比較
例一:
String a = "ttt";
String b = "ttt";
equals相等 ==相等
例二:
String a = new String("ttt");
String b = new String("ttt");
equals相等 ==不相等
例三:
String a = "ttt";
String b = new String("ttt");
equals相等 ==不相等