java 迴圈結構和常用的類 總結筆記
這裡主要總結:Number 類、Character 類、String 類、StringBuffer 和 StringBuilder 類
java迴圈結構比較簡單,這裡只總結Java 增強 for 迴圈。
1. Java 增強 for 迴圈
Java5 引入了一種主要用於陣列的增強型 for 迴圈。
Java 增強 for 迴圈語法格式如下:
for(宣告語句 : 表示式)
{
//程式碼句子
}
宣告語句:宣告新的區域性變數,該變數的型別必須和陣列元素的型別匹配。其作用域限定在迴圈語句塊,其值與此時陣列元素的值相等。
表示式:表示式是要訪問的陣列名,或者是返回值為陣列的方法。
public class Test {
public static void main(String args[]){
int [] numbers = {10, 20, 30, 40, 50};
for(int x : numbers ){
System.out.print( x );
System.out.print(",");
}
System.out.print("\n");
String [] names ={"James", "Larry", "Tom", "Lacy"};
for ( String name : names ) {
System.out.print( name );
System.out.print(",");
}
}
}
2. Java Number 類
在實際開發過程中,我們經常會遇到需要使用物件,而不是內建資料型別的情形。為了解決這個問題,Java 語言為每一個內建資料型別提供了對應的包裝類.
所有的包裝類(Integer、Long、Byte、Double、Float、Short)都是抽象類 Number 的子類。
這種由編譯器特別支援的包裝稱為裝箱,所以當內建資料型別被當作物件使用的時候,編譯器會把內建型別裝箱為包裝類。相似的,編譯器也可以把一個物件拆箱為內建型別。Number 類屬於 java.lang 包。
/**
* java中的自動裝箱與拆箱
* 簡單一點說,裝箱就是自動將基本資料型別轉換為包裝器型別;拆箱就是自動將包裝器型別轉換為基本資料型別。
*/
public class Number {
public static void main(String[] args) {
/**
Integer i1 = 128; // 裝箱,相當於 Integer.valueOf(128);
int t = i1; //相當於 i1.intValue() 拆箱
System.out.println(t);
*/
/**
對於–128到127(預設是127)之間的值,被裝箱後,會被放在記憶體裡進行重用
但是如果超出了這個值,系統會重新new 一個物件
*/
Integer i1 = 200;
Integer i2 = 200;
/**
注意 == 與 equals的區別
== 它比較的是物件的地址
equals 比較的是物件的內容
*/
if(i1==i2) {
System.out.println("true");
} else {
System.out.println("false");
}
}
}
注意:
== 它比較的是物件的地址
equals 比較的是物件的內容
3. Character 類
Character類提供了一系列方法來操縱字元。你可以使用Character的構造方法建立一個Character類物件,例如:
Character ch = new Character('a');
在某些情況下,Java編譯器會自動建立一個Character物件。
例如,將一個char型別的引數傳遞給需要一個Character型別引數的方法時,那麼編譯器會自動地將char型別引數轉換為Character物件。 這種特徵稱為裝箱,反過來稱為拆箱。
// 原始字元 'a' 裝箱到 Character 物件 ch 中
Character ch = 'a';
// 原始字元 'x' 用 test 方法裝箱
// 返回拆箱的值到 'c'
char c = test('x');
4. String 類
4.1 建立字串
建立字串最簡單的方式如下:
String greeting = "菜鳥教程";
在程式碼中遇到字串常量時,這裡的值是 “菜鳥教程”“,編譯器會使用該值建立一個 String 物件。
和其它物件一樣,可以使用關鍵字和構造方法來建立 String 物件。
public class StringDemo{
public static void main(String args[]){
char[] helloArray = { 'r', 'u', 'n', 'o', 'o', 'b'};
String helloString = new String(helloArray);
System.out.println( helloString );
}
}
以上例項編譯執行結果如下:
runoob
注意:
String 類是不可改變的,所以你一旦建立了 String 物件,那它的值就無法改變了。
如果需要對字串做很多修改,那麼應該選擇使用 StringBuffer & StringBuilder 類。
String 類是不可改變的解析,例如:
String s = "Google";
System.out.println("s = " + s);
s = "Runoob";
System.out.println("s = " + s);
輸出結果為:
Google
Runoob
從結果上看是改變了,但為什麼門說String物件是不可變的呢?
原因在於例項中的 s 只是一個 String 物件的引用,並不是物件本身,當執行 s = “Runoob”; 建立了一個新的物件 “Runoob”,而原來的 “Google” 還存在於記憶體中。
4.2 length()方法,length屬性和size()的方法的區別:
1.length()方法是針對字串來說的,要求一個字串的長度就要用到它的length()方法;
2.length屬性是針對Java中的陣列來說的,要求陣列的長度可以用其length屬性;
3.java中的size()方法是針對泛型集合說的,如果想看這個泛型有多少個元素,就呼叫此方法來檢視!
4.3
1.對整數進行格式化:%[index$][標識][最小寬度]轉換方式
格式化字串由4部分組成,特殊的格式常以%index$開頭,index從1開始取值,表示將第index個引數拿進來進行格式化,[最小寬度]的含義也很好理解,就是最終該整數轉化的字串最少包含多少位數字。剩下2個部分的含義:
標識:
‘-’ 在最小寬度內左對齊,不可以與”用0填充”同時使用
‘#’ 只適用於8進位制和16進位制,8進位制時在結果前面增加一個0,16進位制時在結果前面增加0x
‘+’ 結果總是包括一個符號(一般情況下只適用於10進位制,若物件為BigInteger才可以用於8進位制和16進位制)
’ ’ 正值前加空格,負值前加負號(一般情況下只適用於10進位制,若物件為BigInteger才可以用於8進位制和16進位制)
‘0’ 結果將用零來填充
‘,’ 只適用於10進位制,每3位數字之間用”,”分隔
‘(’ 若引數是負數,則結果中不新增負號而是用圓括號把數字括起來(同’+’具有同樣的限制)
轉換方式:
d-十進位制 o-八進位制 x或X-十六進位制
上面的說明過於枯燥,我們來看幾個具體的例子。需要特別注意的一點是:大部分標識字元可以同時使用。
System.out.println(String.format("%1$,09d", -3123));
System.out.println(String.format("%1$9d", -31));
System.out.println(String.format("%1$-9d", -31));
System.out.println(String.format("%1$(9d", -31));
System.out.println(String.format("%1$#9x", 5689));
//結果為:
//-0003,123
// -31
//-31
// (31)
// 0x1639
2.對浮點數進行格式化:%[index$][標識][最少寬度][.精度]轉換方式
我們可以看到,浮點數的轉換多了一個”精度”選項,可以控制小數點後面的位數。
標識:
‘-’ 在最小寬度內左對齊,不可以與”用0填充”同時使用
‘+’ 結果總是包括一個符號
’ ’ 正值前加空格,負值前加負號
‘0’ 結果將用零來填充
‘,’ 每3位數字之間用”,”分隔(只適用於fgG的轉換)
‘(’ 若引數是負數,則結果中不新增負號而是用圓括號把數字括起來(只適用於eEfgG的轉換)
轉換方式:
‘e’, ‘E’ – 結果被格式化為用電腦科學記數法表示的十進位制數
‘f’ – 結果被格式化為十進位制普通表示方式
‘g’, ‘G’ – 根據具體情況,自動選擇用普通表示方式還是科學計數法方式
‘a’, ‘A’ – 結果被格式化為帶有效位數和指數的十六進位制浮點數
3.對字元進行格式化:
對字元進行格式化是非常簡單的,c表示字元,標識中’-‘表示左對齊,其他就沒什麼了。
5. StringBuffer 和 StringBuilder 類
當對字串進行修改的時候,需要使用 StringBuffer 和 StringBuilder 類。
和 String 類不同的是,StringBuffer 和 StringBuilder 類的物件能夠被多次的修改,並且不產生新的未使用物件。
StringBuilder 類在 Java 5 中被提出,它和 StringBuffer 之間的最大不同在於 StringBuilder 的方法不是執行緒安全的(不能同步訪問)。
由於 StringBuilder 相較於 StringBuffer 有速度優勢,所以多數情況下建議使用 StringBuilder 類。然而在應用程式要求執行緒安全的情況下,則必須使用 StringBuffer 類。
總結:
Java 中 StringBuffer 和 String 是有一定的區別的,首先,String 是被 final 修飾的,他的長度是不可變的,就算呼叫 String 的
concat 方法,那也是把字串拼接起來並重新建立一個物件,把拼接後的 String 的值賦給新建立的物件,而 StringBuffer 的長度是可變的,呼叫StringBuffer 的 append 方法,來改變 StringBuffer 的長度,並且,相比較於 StringBuffer,String 一旦發生長度變化,是非常耗費記憶體的!