java包裝類+自動裝箱
阿新 • • 發佈:2018-12-20
1.包裝類
- 後臺Web工程師
- 1:開發模式
- 2.1:C/S 客戶端/伺服器
- 2.2:B/S 瀏覽器/伺服器
- 2: 瀏覽器給伺服器傳送資料
- 3:瀏覽器端資料全是字串型別
- 4:但是在java後臺我們要對這些資料做轉型操作
- 包裝類:
- 在實際開發中,我們很多時候,需要將基本型別轉為引用型別,便於後期的操作,
- 這個時候,java就給我們提供了8種包裝類,分別是
- 基本型別 -> 包裝類
byte ->Byte
short ->Short
int -> Integer
long -> Long
char -> Character
float -> Float
double -> Double
boolean -> Boolean
如何學習java中的型別
1:型別的解釋
2:父類,子類,介面
3:jdk的版本
4:構造器
5:常用屬性
6:常用方法
/**
* 測試類
* @author Administrator
*
*/
public class Test {
public static void main(String[] args) {
User user = Register.register();
System.out.println("使用者名稱\t密碼\t年齡\t性別");
System.out.println(user.getName()+user.getPassword()+user.getAge()+user.getSex());
}
}
/** * 實體類 * @author Administrator * */ public class User { private String name; private String password; private int age; private String sex; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public User(String name, String password, int age, String sex) { super(); this.name = name; this.password = password; this.age = age; this.sex = sex; } public User() { super(); // TODO Auto-generated constructor stub }
import java.util.Scanner; /** * * 業務類 * @author Administrator * */ public class Register { /* * 註冊一個使用者 */ public static User register(){ //使用鍵盤錄入使用者資訊 Scanner sc = new Scanner(System.in); System.out.println("請輸入使用者名稱"); String name = sc.nextLine(); System.out.println("請輸入密碼"); String password = sc.nextLine(); System.out.println("請輸入年齡"); String age1 = sc.nextLine(); System.out.println("請輸入性別"); String sex = sc.nextLine(); //問題1:年齡是整型,但是使用者傳給我們的是字串,怎麼解決了? int age = Integer.parseInt(age1); User user = new User(name, password, age, sex); return user; } }
2 自動裝箱與拆箱
- Integer類的學習
* Integer 類在物件中包裝了一個基本型別 int 的值。Integer 型別的物件包含一個 int 型別的欄位。
* 父類:Number
* 父介面:Serializable,序列化介面 Comparable 自然比較介面
* 構造器
* 構造方法摘要
* Integer(int value)
* 構造一個新分配的 Integer 物件,它表示指定的 int 值。
* Integer(String s)
* 構造一個新分配的 Integer 物件,它表示 String 引數所指示的 int 值
* 屬性
* MAX_VALUE int的最大值
* MIN_VALUE int的最小值
* 方法
* 轉換方法
* 獲取方法
* 設定方法
* 判斷方法
* 注意:Integer範圍值 在-128-127 的值,是直接宣告在一個Integer陣列中的,這個陣列是一個final型別的陣列
* 所以,存在的記憶體在常量池中,所以獲取-128-127 之間的值,直接去常量池獲取,即可,不用建立Integer物件,節省記憶體空間
*
* 1:如何把字串轉為int?
* int a = Integer.parseInt(“100”)’
* 2:如何把int轉為字串?
*
*
*/
public class Demo {
public static void main(String[] args) {
//Integer it = new Integer(100);
//自動裝箱功能:把int型別自動裝載到Integer中 先裝箱,再賦值
//Integer it2 = 200;
//Integer it3 = Integer.valueOf(100);
//System.out.println(it2);
//自動拆箱功能:把Integer型別中int值取出來
//Integer it4 = it2+it3; //先對it2 和 it3做拆箱功能,然後相加,得到一個int型別的值,
然後在對這個int型別的值,
做裝箱操作, 最後再賦值
//Integer it4 = Integer.valueOf(it2.intValue() + it3.intValue());
//System.out.println(it4);
//System.out.println(it2+100);
//獲取int型別的最大值和最小值
//int max_value = 2147483647;
//System.out.println(Integer.MAX_VALUE);
//System.out.println(Integer.MIN_VALUE);
//Integer it6 = new Integer("abc"); //NumberFormatException
//Integer it7 = 1000;
//byte b = it7.byteValue();
//System.out.println(b);
/*Integer it1 = 100;
Integer it2 = 100;
Integer it3 = new Integer(100);
Integer it4 = new Integer(100);
//在地址符做比較
System.out.println(it1==it2); //true
System.out.println(it1==it3); //false
System.out.println(it2==it3); //false
System.out.println(it3==it4); //false
System.out.println(it1.equals(it2));
System.out.println(it1.equals(it3));
System.out.println(it2.equals(it3));
System.out.println(it3.equals(it4));
//在數字上做比較 結果為0代表數字相等,結果為1,代表當前物件比你傳進來的物件的值大,-1 反之則小
System.out.println(it1.compareTo(it2));
System.out.println(it1.compareTo(it4));
System.out.println(it4.compareTo(it1));
//將字串解碼為Integer
System.out.println(Integer.decode("1001")+100);*/
//在實際開發
//System.out.println(0.00001+0.00004f);
//把Integer轉為int
Integer it = 1024;
System.out.println(it.intValue());
//將字串引數作為有符號的十進位制整數進行解析。
/*System.out.println(Integer.parseInt("-100"));
System.out.println(Integer.parseInt("100"));
// 使用第二個引數指定的基數,將字串引數解析為有符號的整數。
System.out.println(Integer.parseInt("200", 10));
System.out.println(Integer.reverse(100));*/
//把10進位制的數字轉為2進位制,8進位制,16進位制的字串
System.out.println(Integer.toBinaryString(100));
System.out.println(Integer.toHexString(100));
System.out.println(Integer.toOctalString(100));
//把10進位制的數字轉為任意進位制 範圍2-36進位制
System.out.println(Integer.toString(100, 37));
}
}
(1)自動裝箱:把基本型別用它們對應的引用型別包裝起來,使它們具有物件的特質,可以呼叫toString()、hashCode()、getClass()、equals()等方法。
如下:
Integer a=3;//這是自動裝箱
其實編譯器呼叫的是static Integer valueOf(int i)這個方法,valueOf(int i)返回一個表示指定int值的Integer物件,
那麼就變成這樣:
Integer a=3; => Integer a=Integer.valueOf(3);
(2)拆箱:跟自動裝箱的方向相反,將Integer及Double這樣的引用型別的物件重新簡化為基本型別的資料。
如下:
int i = new Integer(2);//這是拆箱
編譯器內部會呼叫int intValue()返回該Integer物件的int值
注意:自動裝箱和拆箱是由編譯器來完成的,編譯器會在編譯期根據語法決定是否進行裝箱和拆箱動作。