亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java中的八種基本數(shù)據(jù)類型詳解

 更新時間:2022年04月06日 17:10:33   作者:One Tester  
本文詳細講解了Java中的八種基本數(shù)據(jù)類型,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

一、八種基本數(shù)據(jù)類型常識

基本常識表

對于上圖有以下幾點需要注意:

  • java八種基本數(shù)據(jù)類型分為四類八種,四類分別為整型、浮點型、布爾型、字符型;八種分別為byte、short、int、long、float、double、boolean、char;
  • java八種基本數(shù)據(jù)類型的字節(jié)數(shù):分別為1、2、4、8個字節(jié);1字節(jié)(byte、boolean)、 2字節(jié)(short、char)、4字節(jié)(int、float)、8字節(jié)(long、double);
  • 整數(shù)的默認類型為int,浮點數(shù)的默認類型為double;
  • 八種基本數(shù)據(jù)類型的包裝類:除了char的是Character、int類型的是Integer,其他都是首字母大寫
  • 關(guān)于值的范圍問題,需要注意char類型是無符號的,不能為負,所以是0開始的;

詳解二、直接量與類型轉(zhuǎn)換

2.1、直接量

  • 整數(shù)型的直接量默認為int類型
  • 浮點型的直接量默認為double類型
@Test
	public void d() {
		int a=100;//這個100就是直接量
		a=a+100;//但是這個a+100不是直接量
		double b=3.14;
	}

2.2、類型轉(zhuǎn)換

1.自動轉(zhuǎn)換:低類型的向高類型的轉(zhuǎn)換 

如下圖:順著箭頭的方向是可以自動轉(zhuǎn)換的;

2.強制轉(zhuǎn)換:高類型的向底類型轉(zhuǎn)換,但可能會數(shù)據(jù)溢出或者精度丟失

以上現(xiàn)象在實際中可以出現(xiàn)這三種問題:

  • 定義變量時出現(xiàn)的類型轉(zhuǎn)換
@Test
	public void e(){
		long a=200;//200是直接量,默認為int類型這里是自動轉(zhuǎn)換為弄類型
		
		/*long b=100000000000;*/
		//100000000000是個整數(shù)直接量,默認應(yīng)該為int類型,但是超出了int類型的取值范圍
		
		long c=1000000000000L;
		//在整數(shù)直接量后面將了一個L,表示該直接量不再默認為int類型,為long類型,所以沒錯
		
		/*float d=34.3;*/
		//浮點型直接量默認為double,double類型大,所以不能直接轉(zhuǎn)換為float
		
		float e=34.3f;
		//在浮點數(shù)直接量后面加上一個f,表示該直接量不再默認為double,為float類型
	}

以上為幾種正常的情況,但是有一種特殊的情況,就是int型直接量可以直接賦給byte、short、char類型變量,只要不超出變量類型的取值范圍

@Test 
	public void f() {
		byte a=100;
		short b=200;
		char c=100;//注意char類型是一種特殊的int類型,可以不用寫成單引號括起來的
		
		/*byte d=128;直接量128超出了byte類型的取值范圍*/
		
		/*char e=-1;直接量-1不在char類型的取值范圍內(nèi)*/
		
	}
  • 數(shù)據(jù)運算時的類型轉(zhuǎn)換

(1)運算時,運算結(jié)果會向較大的類型轉(zhuǎn)換

@Test
	public void g() {
		int a=3;
		double b=4;
		System.out.println(a+b);//輸出7.0
		
		float c=3.2f;
		/*c=c+3.14; 編譯錯誤,運算之后變?yōu)閐ouble類型*/	
	}

(2)特殊的:byte、short、char三種數(shù)據(jù)類型參與運算時,先一律轉(zhuǎn)化為int類型;

	@Test
	public void h() {
		byte a=3;
		byte b=4;
		/*byte c=a+b;
		 * 編譯錯誤,此處由于byte類型參與運算時,先直接轉(zhuǎn)換為int類型,
		 * 所以最后的結(jié)果也是int類型,但是得出的結(jié)果不能叫做int類型的直接量,所以編譯錯誤
		 * */
		int d=a+b;
	}
  • 強制轉(zhuǎn)換

高等級轉(zhuǎn)為低等級的時候,必須強制轉(zhuǎn)換,但實際工作中不推薦使用強制轉(zhuǎn)換,可能會失精度或數(shù)據(jù)溢出;

@Test
	public void j() {
		int a=128;
		byte b=(byte)a;
		System.out.println(b);//輸出-128,出現(xiàn)了數(shù)據(jù)溢出
		
		double c=1.23;
		int d=(int)c;
		System.out.println(d);//輸出1,精度丟失
	}

補充說明:不是只有強制轉(zhuǎn)換的時候會出現(xiàn)數(shù)據(jù),例如下面這種情況

@Test
	public void k() {
		int a=10000000;
		int b=10000000;
		int c=a*b;
		System.out.println(c);//輸出276447232,得到的結(jié)果超出了int類型的范圍,數(shù)據(jù)溢出
	}

三、對應(yīng)包裝類及使用

3.1、基本介紹

java是一門面向?qū)ο蟮恼Z言,但是8中基本數(shù)據(jù)類型不具備面向?qū)ο蟮奶卣?,所以實際使用中很不便所以為java八種基本數(shù)據(jù)類型提供了對應(yīng)的包裝類。

基本數(shù)據(jù)類型對應(yīng)包裝類包裝類的父類
bytejava.lang.Bytejava.lang.Number
shortjava.lang.Shortjava.lang.Number
intjava.lang.Integerjava.lang.Number
longjava.lang.Longjava.lang.Number
floatjava.lang.Floatjava.lang.Number
doublejava.lang.Doublejava.lang.Number
booleanjava.lang.Booleanjava.lang.Object
charjava.lang.Characterjava.lang.Object
  • 對應(yīng)包裝類比較特殊的就是int對應(yīng)的Integer和char對應(yīng)的Character;
  • 對應(yīng)包裝類的直接父類:前6個由于是數(shù),直接父類為Number,而后兩個的直接父類就是Object類;

3.2、常用方法一:靜態(tài)方法 valueOf()

  • 參數(shù)為基本數(shù)據(jù)類型,返回包裝類對象;
  • 參數(shù)為String字符串(Character類沒有以String為 參數(shù)的該方法),返回包裝類對象;
@Test
	public void a() {
	/*1.參數(shù)為基本數(shù)據(jù)類型		
	 * 作用:將基本數(shù)據(jù)類型轉(zhuǎn)換為對應(yīng)包裝類 * */
		Integer i=Integer.valueOf(10);
		System.out.println(i);//輸出10
	
	/*2.參數(shù)為String字符串時,
	 * 作用:返回指定字符串值的包裝類對象
	 * 	*/
		Integer a=Integer.valueOf("100");
		System.out.println(a);//輸出100
		
		Integer b=Integer.valueOf("100a")為
		System.out.println(b);//運行錯誤,字符串的值不少一個int類型的
		
	}

3.3、常用方法二:靜態(tài)方法parseXXX(String str)

  • Character類沒有該方法;
  • 作用:將字符串裝換為對應(yīng)的基本數(shù)據(jù)類型(注意此處和上面的valueOf方法返回值的不同);
@Test
	public void b() {
		/*作用:將給定字符串裝換為對應(yīng)的基本數(shù)據(jù)類型
		 * 前提是該字符串必須正確描述該基本數(shù)據(jù)類型表示的值*/
		int a=Integer.parseInt("100");
		System.out.println(a);//輸出100
		
		int b=Integer.parseInt("100a");
		System.out.println(b);//運行錯誤,字符串的值不為int類型
				
	}

3.4、常用方法二:非靜態(tài)方法XXXValue()

  1. 因為是非靜態(tài)方法,所以不能像上面兩個方法用類名調(diào)用了;
  2. 數(shù)字類的包裝類(八種包裝類中父類是Number的的六個類)才有該方法;
  3. 作用:將當前包裝類對象轉(zhuǎn)換為對應(yīng)的基本數(shù)據(jù)類型;
@Test
	public void c() {
		/*作用:將包裝類對象轉(zhuǎn)換為對應(yīng)的基本數(shù)據(jù)類型*/
		
		Integer a=Integer.valueOf(100);//將基本數(shù)據(jù)類型轉(zhuǎn)換為包裝類對象
		int b=a.intValue();//將包裝類對象轉(zhuǎn)換為對應(yīng)的基本數(shù)據(jù)類型
		System.out.println(b);//輸出100
		
		Double c=Double.valueOf(2.33);
		double d=c.doubleValue();
		System.out.println(d);
	}

3.5、自動拆箱與裝箱

簡介:jdk1.5之后的新特性。該特性是編譯器認可的,是在編譯器自動將基本數(shù)據(jù)類型和包裝類相互轉(zhuǎn)換,節(jié)省了麻煩。

  • 自動拆箱 包裝類——>基本數(shù)據(jù)類型 (原理是調(diào)用了xxxValue方法)
  • 自動裝箱 基本數(shù)據(jù)類型——>包裝類 (原理是調(diào)用了valueOf方法)
@Test
	public void d() {
		/*自動裝箱:valueOf*/
		Integer i=123;//原理是 Integer i=Integer.valueOf(123);
		
		/*自動拆箱*/
		int i1=i+1;//原理是	int i1=i.intValue()+1;
		
		Integer a=123;
		Integer b=123;
		Integer c=a+b;
		/*原理為Integer c=Integer.valueOf(a.intValue()+b.intValue());*/
	}

3.6、關(guān)于valueOf()方法源碼研究

通過按住Ctrl鍵,鼠標點擊該方法即可查看源碼,以Integer類的valueOf(int i)的源碼為例

 public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }
  • 關(guān)于源碼的理解:Integer類的valueOf(int i)方法首先會判斷i是否在-128~127之間,如果在的話,就返回的對象是Integer類中靜態(tài)數(shù)組cache中的對象,如果不是在這之間,就會重寫創(chuàng)建一個新的對象。

通過查看其它類的該方法的源碼之后,可以得到該表:

包裝類valueOf(X i)返回對象的原則
Byte直接取,數(shù)組范圍為(-128,127),且byte值的范圍也是(-128,127)
Short(-128,127)之間在數(shù)組中取,否則new
Integer(-128,127)之間在數(shù)組中取,否則new
Long(-128,127)之間在數(shù)組中取,否則new
Float直接new
Double直接new
Boolean直接返回,不new
Character0-127之間從數(shù)組中取,否則new

四、相關(guān)面試題

4.1、類型轉(zhuǎn)換

注意一些喜歡忽視的類型轉(zhuǎn)換

public static void main(String[] args) {
		int a=10;
		double b=3.4;
		System.out.println(a>b?a:b);
		System.out.println(a);
	}
/*輸出:10.0   10
解析:這里是一個很容易讓人不注意的類型轉(zhuǎn)化,這里a與b參與了運算,
所以類型向類型大的方向轉(zhuǎn)化,10就變成了10.0,但是a本身是沒有變化的*/

4.2、+=的情況

public static void main(String[] args) {
		short a=1;	//第一行
		 a=a+1;		//第二行
		 a+=1;		//第三行
}
/*第幾行的代碼會出錯?
答案:第二行會出錯,由于a+1變?yōu)榱薸nt類型,而int類型不能直接賦值給short類型
但是+=這種情況是特殊的,所以不會出錯;
*/

4.3、自動裝箱

包裝類和基本數(shù)據(jù)類型比較時,只要值相等就相等

public static void main(String[] args) {
		Integer a1=127;
		Integer a2=127;
		int a3=127;
		Integer b1=128;
		Integer b2=128;
		int b3=128;
		System.out.println(a1==a2);
		System.out.println(a1==a3);
		System.out.println(b1==b2);
		System.out.println(b1==b3);	
}
/*輸出:true true false true
解析:自動裝箱時采用valueOf方法,由于127在靜態(tài)數(shù)組的范圍內(nèi),所以不是new的,
而128的兩個引用是指向new出現(xiàn)對象的,所以第一個是true,第三個是false。
而包裝類和基本數(shù)據(jù)類型比較時,只要數(shù)值是相等的,就相等
*/

4.4、char類型存儲漢字

char類型能不能存儲一個漢字?為什么?

解析:能,char類型采用的是Unicode編碼,Unicode編碼包含漢字,所以char類型自然是可以存儲一個漢字的

4.5、浮點數(shù)精度問題

public static void main(String[] args) {
		System.out.println(0.1*3==0.3);
		System.out.println(0.1*4);
}
/*輸出:false 0.4
解析:有些浮點數(shù)不能準確的表示出來,與整數(shù)相乘之后出精度丟失,常見為小數(shù)位含3的
*/

到此這篇關(guān)于Java八種基本數(shù)據(jù)類型的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • java基本教程之常用的實現(xiàn)多線程的兩種方式 java多線程教程

    java基本教程之常用的實現(xiàn)多線程的兩種方式 java多線程教程

    下面開始學習“常用的實現(xiàn)多線程的2種方式”:Thread 和 Runnable。之所以說是常用的,是因為通過還可以通過java.util.concurrent包中的線程池來實現(xiàn)多線程
    2014-01-01
  • tk.mybatis實現(xiàn)uuid主鍵生成的示例代碼

    tk.mybatis實現(xiàn)uuid主鍵生成的示例代碼

    本文主要介紹了tk.mybatis實現(xiàn)uuid主鍵生成的示例代碼,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Java如何通過Maven管理項目依賴

    Java如何通過Maven管理項目依賴

    這篇文章主要介紹了Java如何通過Maven管理項目依賴,幫助大家更好的理解和使用maven,感興趣的朋友可以了解下
    2020-10-10
  • springmvc處理異步請求的示例

    springmvc處理異步請求的示例

    這篇文章主要介紹了springmvc處理異步請求的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • Lombok注解-@SneakyThrows的使用

    Lombok注解-@SneakyThrows的使用

    這篇文章主要介紹了Lombok注解-@SneakyThrows的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Mybatis-plus中IService接口的基本使用步驟

    Mybatis-plus中IService接口的基本使用步驟

    Mybatis-plus是一個Mybatis的增強工具,它提供了很多便捷的方法來簡化開發(fā),IService是Mybatis-plus提供的通用service接口,封裝了常用的數(shù)據(jù)庫操作方法,包括增刪改查等,下面這篇文章主要給大家介紹了關(guān)于Mybatis-plus中IService接口的基本使用步驟,需要的朋友可以參考下
    2023-06-06
  • java中如何把實體類轉(zhuǎn)成json格式的字符串

    java中如何把實體類轉(zhuǎn)成json格式的字符串

    這篇文章主要介紹了java中如何把實體類轉(zhuǎn)成json格式的字符串問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • SpringBoot項目中定時器的實現(xiàn)示例

    SpringBoot項目中定時器的實現(xiàn)示例

    在Spring?Boot項目中,你可以使用Spring框架提供的@Scheduled注解來編寫定時任務(wù),本文就來介紹一下SpringBoot項目中定時器的實現(xiàn),感興趣的可以了解一下
    2023-11-11
  • 詳解Java中方法重寫和方法重載的6個區(qū)別

    詳解Java中方法重寫和方法重載的6個區(qū)別

    方法重寫和方法重載都是面向?qū)ο缶幊讨?,那么方法重寫和方法重載有哪些區(qū)別,本文就詳細的來介紹一下,感興趣的可以了解一下
    2022-01-01
  • 深入了解Java核心類庫--Arrays類

    深入了解Java核心類庫--Arrays類

    這篇文章主要為大家詳細介紹了java Arrays類定義與使用的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能給你帶來幫助
    2021-07-07

最新評論