1. java中的字元串相加
首先你要搞清楚的是字元串用==比較,是比較兩個字元串是不是指向同一個對象。
程序在運行的時候會創建一個字元串緩沖池,程序會把字元串常量(如程序中的"a","b","ab","a"+"b")放入字元串緩沖池中(這里"ab","a"+"b"是一個對象)。當使用
String s3 = "ab";
String s4 = s1 + s2;
String s5 = "a" + "b";
這樣的表達是創建字元串的時候,程序首先會在這個String緩沖池中尋找相同值的對象,s3先被放到了池中,所以在s5被創建的時候,程序找到了具有相同值的 s3,將s5引用s3所引用的對象"ab"。所以比較s5==s3由於兩個是指向同一個對象,所以為true。
但是在這些賦值中,涉及到變數運算,所以得到的字元串對象存儲在各自的內存中,不是緩沖池中的s3對象,如
String s4 = s1 + s2;
String s6 = s1 + "b";
所以 盡管s4,s6的值均為"ab",但是 s4==s3,s6==s3返回的結果均為false;
同時s4,s6也不是指向相同的對象,因為他們在不同內存中。
StringBuffer s7 = new StringBuffer("abc");
String s8 = s7.substring(3); //這個方法是從第3個字元取字元串,得到的s8為"'; 為空字元串。
所以s8==s3的結果也為false;
如果相比較兩個字元串的值是不是相等,最好用.equals()方法。
2. java中基本數據類型與String類型有什麼區別
java 中String 是個對象,是引用類型
基礎類型與引用類型的區別是,基礎類型只專表示簡單的字元或數字,屬引用類型可以是任何復雜的數據結構
基本類型僅表示簡單的數據類型,引用類型可以表示復雜的數據類型,還可以操作這種數據類型的行為
java虛擬機處理基礎類型與引用類型的方式是不一樣的,對於基本類型,java虛擬機會為其分配數據類型實際佔用的內存空間,而對於引用類型變數,他僅僅是一個指向堆區中某個實例的指針。
3. java 提出字元串中的數字並相加
比較每個字元的ASIIC碼,在數字范圍內就留下,不是跳過,最後相加就完了,很簡單