包裝引用類型和數據類型之間的轉換詳解

一、String

a,特點:
	--String字符串類,用來表示"",String類被final修飾,也就是不可以被繼承。
	--String類底層維護了一個char[],而且是final的,也就是說數組一旦創建長度和值都不能被修改了,字符串就變成了一個常量。
	--源碼摘抄:
		--public final class String{}
		--private final char value[];
b,創建對象:
	--String(char[] value) 分配一個新的 String,使其表示字符數組參數中當前包含的字符序列。
c,常用方法:
	--char charAt(int index)  返回指定索引處的 char 值。 
	--String concat(String str) 將指定字符串連接到此字符串的結尾。 
	--boolean contains(CharSequence s) 當且僅當此字符串包含指定的 char 值序列時,返回 true。 
d,測試:
//這個類用來測試字符串使用
		public class Test1_String {
			public static void main(String[] args) {
				//1、創建字符串對象
				//String(char[] value) 分配一個新的 String,使其表示字符數組參數中當前包含的字符序列。
				char[] c = new char[10];
				String s = new String(c);//可以體現字符串底層維護了一個char[],存儲在堆內存中。
				
				String s2 = "abc";//可以直接賦值,存儲在堆內存的常量池中。
				
				//2、常用方法
				System.out.println(  s2.charAt(1) );//b//獲取指定索引對應着的字符
				System.out.println(  s2.concat("mno") );//拼接字符串
				System.out.println(  s2.contains("bc")  );//判斷是否包含執行字符串
				System.out.println(  s2.endsWith("opq")  );//判斷是否以指定元素結束
				System.out.println(  s2.equals("abc")  );//比較了字符串存儲的值本身,因爲String類重寫了equals()
				System.out.println(  s2.hashCode()  );//獲取對象在內存中的哈希碼值
				System.out.println(  s2.getBytes()   );//[B@15db9742
				System.out.println(  Arrays.toString(  s2.getBytes()  )  );//因爲返回值是byte[]只存整型,[97, 98, 99]
				
				s2="abcaaaccc";
				System.out.println(  s2.indexOf("c"));//指定字符串在s2中第一次出現的位置
				System.out.println(  s2.lastIndexOf("c"));//指定字符串在s2中最後一次出現的位置
				System.out.println(  s2.isEmpty()  );//判斷字符串是否爲空
				System.out.println(  s2.length()  );//獲取字符串的長度
				System.out.println( s2.startsWith("iop")  );//判斷是否以指定內容開始
				System.out.println( s2.substring(3)  );//從指定下標處開始向後截取字符串[3,n)
				System.out.println( s2.substring(3,6)  );//從第一個下標開始,到第二個下標的結束,截取中間的字符串,含頭不含尾[m,n)
				System.out.println(  s2.toCharArray()  );//toCharArray()返回值是一個char[]
				
				System.out.println(  s2.toLowerCase()  );//把s2都轉小寫
				System.out.println(  s2.toUpperCase()  );//把s2都轉大寫
				
				s2 = "    abc     ";
				System.out.println(  s2.trim() );//去除前面和後面的多餘空格
				System.out.println( String.valueOf(100)  +1 );
				
				s2="a|b|c|d|e|f";
				//在java裏有一些特殊的字符  \  | ,程序就無法完成你想要的功能,想要實現功能,需要對特殊字符轉義\\
				String[] strs = s2.split("\\|");//按照指定的方式切割字符串
				System.out.println(  Arrays.toString(strs) );//[a, b, c, d, e, f]
				
			}
		}

二、StringBuilder

a,創建對象
  • StringBuilder() 構造一個不帶任何字符的字符串生成器,其初始容量爲 16 個字符。
b,常用方法
  • StringBuilder append(String str) 將指定的字符串追加到此字符序列。
c,測試:測試字符串連接效率
//這個類用來測試字符拼接時效率問題
//字符串在做大量的拼接時,使用原始的+拼接,效率極低。
//可以使用工具類StringBuilder / StringBuffer來優化字符串拼接過程。
//StringBuffer誕生於jdk1.0,StringBuilder誕生於jdk1.5。
public class Test2_StringBuilder {
	public static void main(String[] args) {
//		method();//用+拼接字符串,拼接10000次
		method1();//優化字符串拼接
	}
	private static void method1() {
		//定義字符串
		String str = "abcdefghijklmnopqrstuvwxyz" ;
		//拼接10000次字符串
//		StringBuilder sb = new StringBuilder();
		StringBuffer sb = new StringBuffer();
		long start = System.currentTimeMillis(); // 計時開始ms
		for (int i = 0; i < 10000; i++) {
			sb.append(str); // 拼接str
		}
		long end = System.currentTimeMillis(); // 計時結束ms
		//計時
		System.out.println(end-start);//3159ms    2ms
	}
	private static void method() {
		//定義字符串
		String str = "abcdefghijklmnopqrstuvwxyz" ;
		
		//拼接10000次字符串
		String result = "";//定義變量,記錄拼接結果
		
		long start = System.currentTimeMillis(); // 計時開始ms
		
		for (int i = 0; i < 10000; i++) {
			result = result+str ;//拼接 result += str;
		}
		
		long end = System.currentTimeMillis(); // 計時結束ms
		
		//打印拼接結果
		System.out.println(end-start);//3159ms 3.2s
	}
}

三、包裝類

a,概念:
  • 針對八大基本類型都有對應着的包裝類,目的是提供更完善的功能
    – 八大基本類型: byte short int long float double char boolean
    – 包裝類: Byte Short Integer Long Float Double Character Boolean
b,包裝類的繼承結構:
	-- 所有的數字類型的父類 叫Number
		--源碼摘抄:public abstract class Number
		-- byte byteValue() 以 byte 形式返回指定的數值。 
		--abstract  double doubleValue()  以 double 形式返回指定的數值。 
		--abstract  float floatValue()  以 float 形式返回指定的數值。 
		--abstract  int intValue()  以 int 形式返回指定的數值。 
		--abstract  long longValue()  以 long 形式返回指定的數值。 
		--short shortValue()   以 short 形式返回指定的數值。 
c,Integer
	--源碼摘抄:public final class Integer
	--創建對象:
		--Integer(int value) 構造一個新分配的 Integer 對象,它表示指定的 int 值。
	--常用方法:
		--int intValue() 以 int 類型返回該 Integer 的值。 
		--static int parseInt(String s)將字符串參數作爲有符號的十進制整數進行解析。
		--static Integer valueOf(int i)返回一個表示指定的 int 值的 Integer 實例。 
測試:
//這個類用來測試包裝類型:因爲包裝類能提供更豐富的功能
		public class Test3_Number {
			public static void main(String[] args) {
				//1、創建Integer對象
				//Integer是針對基本類型的int進行了包裝
				Integer i = new Integer(10);  //普通的創建方式,效率稍低
				Integer i2 = Integer.valueOf(10);//效率高,在Integer類中,包含256個Integer緩存對象,範圍是 -128到127。
		//使用valueOf()時,如果指定範圍內的值,訪問緩存對象,而不新建;如果指定範圍外的值,直接新建對象。
				
				Integer i3 = Integer.valueOf(10);
				System.out.println( i2==i3 );//i2已經存過了10,i3又要存相同數據就不再開闢空間存相同數據了,而是直接拿着存過的10使用														
				System.out.println( i == i3 );
				
				//2、常用方法
				System.out.println(i2.MAX_VALUE);
				
				//3、i或者i2已經是把基本類型的10變成了包裝類型了,怎麼再把包裝類型變回成基本類型?
				System.out.println(  i2.intValue() );
				
				int sum = Integer.parseInt("100");//4、把字符串類型的數字  轉成 基本類型
				System.out.println( sum );
			}
		}
d,Double
--就是基本類型double對應的包裝類型,用來爲double提供更豐富的功能。
--創建對象:
	--Double(double value)構造一個新分配的 Double 對象,它表示基本的 double 參數。	
	--static Double valueOf(double d) 返回表示指定的 double 值的 Double 實例。 
--常用方法:
	--double doubleValue()  返回此 Double 對象的 double 值。 
	--static double parseDouble(String s)返回一個新的 double--測試:

	package cn.tedu.number;
	//這個類用來測試包裝類型:因爲包裝類能提供更豐富的功能
	public class Test3_Number {
		public static void main(String[] args) {
			//1、創建Integer對象
			//Integer是針對基本類型的int進行了包裝
			Integer i = new Integer(10);  //普通的創建方式,效率稍低
			Integer i2 = Integer.valueOf(10);//效率高,在Integer類中,包含256個Integer緩存對象,範圍是 -128到127。
	//使用valueOf()時,如果指定範圍內的值,訪問緩存對象,而不新建;如果指定範圍外的值,直接新建對象。
			
			Integer i3 = Integer.valueOf(10);
			System.out.println( i2==i3 );//i2已經存過了10,i3又要存相同數據就不再開闢空間存相同數據了,而是直接拿着存過的10使用														
			System.out.println( i == i3 );
			
			//2、常用方法
			System.out.println(i2.MAX_VALUE);
			
			//3、i或者i2已經是把基本類型的10變成了包裝類型了,怎麼再把包裝類型變回成基本類型?
			System.out.println(  i2.intValue() );
			
			int sum = Integer.parseInt("100");//4、把字符串類型的數字  轉成 基本類型
			System.out.println( sum );
			
			//double  - Double
			//1、創建Double對象  -- 把基本類型變成包裝類型
			Double d = new Double(3.14);
			Double d2 = Double.valueOf(3.14);
			
			//2、常用方法
			System.out.println(d2.MAX_VALUE);
			System.out.println(d2.doubleValue());//把包裝類型的值變回成基本類型
			double count = Double.parseDouble("3.14");//把字符串類型的值變成基本類型
			System.out.println(count);
			
		}
	}

四、日期類Date

a,概念
  • 類 Date 表示特定的瞬間,精確到毫秒
b,創建對象
  • Date()分配 Date 對象並初始化此對象,以表示分配它的時間(精確到毫秒)。
c,測試
//這個類用來測試日期類date
	public class Test4_Date {
		public static void main(String[] args) {
			//1,創建Date對象
			Date date = new Date();				
			//2,常用方法
			System.out.println( date.getDate() );//今天是當月的幾號
			System.out.println( date.getDay() );//今天是星期幾
			System.out.println( date.getHours() );//現在是幾點
			System.out.println( date.getMonth() );//現在是幾月,底層代碼-1了 
			System.out.println( date.getMinutes() );//現在是每小時的哪一分鐘
			System.out.println( date.getSeconds() );//現在是每分鐘的哪一秒
			System.out.println( date.getTime() );//自1970-1-1 零點到現在的毫秒值
			System.out.println( date.getYear() );//從1900年到現在一共多少年了
			System.out.println( date.toLocaleString() );//變成當前的系統日期
			System.out.println( date.hashCode() );//對象在內存中的哈希碼值
		}
	}

五、日期工具類SimpleDateFormat

a,概念
  • 專門用來完成 Date類型的日期 和 String類型的日期 之間的轉換
b,創建對象
  • SimpleDateFormat(String pattern)用給定的模式和默認語言環境的日期格式符號構造 SimpleDateFormat。
c,常用方法
  • format(Date):把Date格式化成字符串
  • parse(String):把String解析成Date
d,計算你存活的天數:
//這個類用來測試  日期格式化工具類
	public class Test5_SimpleDate {
		public static void main(String[] args) throws ParseException {
			//1,接收用戶輸入的出生日期
			String birthday = new Scanner(System.in).nextLine();				
			//2,把String類型的日期 轉成  Date類型
			//格式怎麼要求呢?--y年M月d天數,格式如:2020-10-10
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//創建工具類的對象
			Date birth = sdf.parse(birthday);			
			//3,做時間差
			long start = birth.getTime();//獲取出生日期那天,對應的ms
			long now = System.currentTimeMillis();//獲取當前時間的ms				
			System.out.println(  (now-start)/1000/60/60/24  );//ms->天
		}
	}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章