1. 程式人生 > >java包裝類+自動裝箱

java包裝類+自動裝箱

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值

注意:自動裝箱和拆箱是由編譯器來完成的,編譯器會在編譯期根據語法決定是否進行裝箱和拆箱動作。