搜尋
首頁JavaJava基礎八種基本資料類型分別是什麼

八種基本資料類型分別是什麼

Jul 02, 2021 pm 12:08 PM
java基本資料類型

八種基本資料型別分別是:1、4種整數型別(byte、short、int、long);2、2種浮點數型別(float、double);3、1種字元型別「 char”;4、1種布林類型“boolean”。

八種基本資料類型分別是什麼

本教學操作環境:windows7系統、java8版、DELL G3電腦。

8種基本資料類型

java中有8種基本資料類型, 分別用於儲存整數、浮點數、字元資料和布林類型資料。要注意的是: 現在所介紹的只是基本資料類型,後續也會介紹很多非基本資料類型。基本資料型別如圖– 1所示:

八種基本資料類型分別是什麼 

- 1

從圖- 1中可以看出, 基本資料型別主要分為4大類(整數型別、浮點型別、char、boolean), 整數型別又分為了4小類(byte、short、int、long), 浮點型別也分了2小類(float、double),這些資料型別的差別是怎麼樣的?透過圖– 2展示了這8種資料型別的儲存空間及使用情境:

 

- 2

如上這8種資料型別中,最常用的有5種,分別為int、long、double、char、boolean。其餘的資料類型幾乎不用,要求對這5種基本資料類型重點掌握,其餘的資料類型,有興趣了解就可以了。

2. int型別

2.1. int型別

int是最常用的整數型,一個int型別的變數佔用4個字節,即32位元的記憶體空間。 Int的最大表示範圍為:-231~231-1,即-2147483648 ~2147483647,約正負21億多。

2.2. 整數直接量是int型別

#所謂整數直接量(literal)就是直接寫出的整數,例如:下面的語句中,100就是直接量。

int a = 100;
int a = 100;

關於整數直接量,需要注意如下要點:

整數的直接量的類型預設為int類型,如果直接寫出的整數超過了int的表達範圍,將會出現編譯錯誤,下面的語句,就是因為超出了整數的範圍而導致的編譯錯誤。

int d = 10000000000; // 编译错误10000000000这个数值写出来就是错误的,因为Java认为所有直接写出的整数都是int类型,而这个数值超过了int的表达范围。
int d = 10000000000; // 编译错误10000000000这个数值写出来就是错误的,因为Java认为所有直接写出的整数都是int类型,而这个数值超过了int的表达范围。

除了通常的十進位數字形式,整數直接量也可以寫成16進位的形式(以0X或0x開頭)或8進位的形式(以0開頭),請看如下直接量三種表現形式:

int a = 100000; // 10进制 
int b = 0x186a0; // 16进制 
int c = 0303240; // 8进制 
int a = 100000; // 10进制
int b = 0x186a0; // 16进制
int c = 0303240; // 8进制

2.3. 整數資料除法運算中的取整

若對兩個整數相除,會捨棄小數的部分(注意:不是四捨五入),結果也是整數。範例程式碼如下所示:

int c = 5/3;
System.out.println(c);  // c的值为1,取整
int total = 87;    
int error = 23;
int percent = error / total * 100;
System.out.println(percent+"%");  //结果为0%,23除以87整数部分为0,乘以100,为0 
percent = 100 * error / total;
System.out.println(percent + "%");  // 结果为26%,230除以87整数部分为26 
int c = 5/3;
System.out.println(c);  // c的值为1,取整
int total = 87;    
int error = 23;
int percent = error / total * 100;
System.out.println(percent+"%");  //结果为0%,23除以87整数部分为0,乘以100,为0
 
percent = 100 * error / total;
System.out.println(percent + "%");  // 结果为26%,230除以87整数部分为26

2.4. 運算時要防止溢出的發生

當兩個整數運算時, 其結果可能會超過整數的範圍而發生溢出,正數過大而產生的溢出,結果為負數;負數過大而產生的溢出,結果為正數。範例程式碼如下圖所示:

int a = 2147483647;    //int类型整数的上限
int b = -2147483648;    //int类型整数的下限
a = a + 1;
b = b - 1;
System.out.println("a=" + a);    //输出结果: a=-2147483648 溢出,结果错误。 
System.out.println("b=" + b);    //输出结果: b=2147483647溢出,结果错误。 
int a = 2147483647;    //int类型整数的上限
int b = -2147483648;    //int类型整数的下限
a = a + 1;
b = b - 1;
System.out.println("a=" + a);    //输出结果: a=-2147483648 溢出,结果错误。
System.out.println("b=" + b);    //输出结果: b=2147483647溢出,结果错误。

3. long型別

#3.1. long型別

在表示整數時,如果int類型的範圍不夠,可以使用long類型,一個long型的變數佔用8個位元組(即64位元),最大表示範圍為:-263 ~ 263-1,即-9223372036854775808 ~ 9223372036854775807。

如果要表示long直接量,需要以 L 或 l 結尾。範例程式碼如下:

long a = 10000000000;   //会有编译错误,因为10000000000编译器认为是int类型,而这个值,已经超出了int的范围
long b = 10000000000l;   //正确
long a = 10000000000;   //会有编译错误,因为10000000000编译器认为是int类型,而这个值,已经超出了int的范围
long b = 10000000000l;   //正确

3.2. 使用long型別進行較大整數的運算

對於較大的整數運算(超過int的表達範圍),可以使用long型。範例程式碼如下:

long distance1 = 10000 * 365 * 24 * 60 * 60 * 299792458l;  
//必须有一个long型数据参与的运算结果才是long型 
System.out.println("distance1="+distance1);//distance1=547836957965889536 结果正确 
long distance2 = 10000 * 365 * 24 * 60 * 60 * 299792458; 
System.out.println("distance2="+ distance2);  //distance2=-1973211136 溢出,=号后面的数据默认为int类型,超出了范围,发生溢出。
long distance1 = 10000 * 365 * 24 * 60 * 60 * 299792458l;  
//必须有一个long型数据参与的运算结果才是long型
System.out.println("distance1="+distance1);//distance1=547836957965889536 结果正确
 
long distance2 = 10000 * 365 * 24 * 60 * 60 * 299792458;
System.out.println("distance2="+ distance2);  //distance2=-1973211136 溢出,=号后面的数据默认为int类型,超出了范围,发生溢出。

3.3. 透過時間毫秒數來儲存日期和時間

JDK提供System.currentTimeMillis() 方法,傳回1970年1月1日零點到此時此刻所經歷的毫秒數,資料太大,故其資料型態為long。範例程式碼如下:

long time = System.currentTimeMillis();
System.out.println(time);     //输出的结果为: 1383835712828
long time = System.currentTimeMillis();
System.out.println(time);     //输出的结果为: 1383835712828

透過上面的程式碼可以看出,輸出的結果已經超出int型別的最大值,因此,JDK設計的回傳型別為long型,該方法常常被用於計時操作。

4. double类型

4.1. 使用double进行浮点数的运算

前面所学习的int、long都是用于存储整数的,小数即为浮点数,包括: float(单精度)和double(双精度),double类型的精度值是float类型的两倍,因此而得名双精精,在实际的应用开发中,float应用极少,大多数场合使用double表示浮点数。示例代码如下:

double pi = 3.14;
double r = 8;
double s = pi * r * r;
System.out.println("s=" + s);   // 输出的结果为:s=200.96
double pi = 3.14;
double r = 8;
double s = pi * r * r;
System.out.println("s=" + s);   // 输出的结果为:s=200.96

4.2. 浮点数直接量是double类型

浮点数的直接量有两种写法:1)通常写法,如:3.14、314、0.1、.5。 2)科学计数法,如:1.25E2、1.25e2、1.25E-2。其中,1.25E2表示1.25乘以10的2次方。

默认的浮点直接量为double型,如果需要表示float类型的直接量,需要加“f”或“F”后缀。例如:

float f1 = 3.14   //编译错误,应该写成3.14f
float f1 = 3.14   //编译错误,应该写成3.14f

4.3. double运算时会出现舍入误差

2进制系统中无法精确的表示1/10,就好像十进制系统中无法精确的表示1/3一样,

所以,2进制表示10进制会有一些舍入误差,对于一些要求精确运算的场合会导致代码的缺陷。示例代码如下所示:

double money = 3.0; 
double price = 2.9; 
System.out.println(money - price);   //输出的结果是: 0.10000000000000009 
double money = 3.0;
double price = 2.9;
System.out.println(money - price);   //输出的结果是: 0.10000000000000009

如果需要精确的运算可以考虑放弃使用double或float而采用BigDecimal 类来实现。关于这一点,将在后续的章节中介绍。

5. char类型

5.1. char类型

字符类型char事实上是一个16位无符号整数(都是正数),这个值是对应字符的编码,Java字符类型采用Unicode字符集编码(通用码、统一码、万国码),而Unicode是世界通用的定长字符集,所有的字符都是16位来表示。例如:字符a实际的值为97,字符A实际的值为65,字符0实际的值为48。

字符直接量可以采用诸如:‘中’的形式,也可以采用16进制的表示形式,例如: ‘\u4e2d’,代码如下所示:

char c1 = ‘中’;   //c1中存的是”中”的编码 
char c2 = '\u4e2d';   //‘4e2d’为‘中’所对应的16位Unicode编码的16进制表示形式
System.out.println(c1);
System.out.println(c2);
char c1 = ‘中’;   //c1中存的是”中”的编码
char c2 = '\u4e2d';   //‘4e2d’为‘中’所对应的16位Unicode编码的16进制表示形式
System.out.println(c1);
System.out.println(c2);

如上代码的输出结果:c1的值为中,c2值也为中,但c1和c2内部存储的其实是”中”这个字符所对应的Unicode码,即:一个无符号的整数。

5.2. 对char型变量赋值

在对char型变量赋值时,可以采用如下三种方式:

方式一:

字符直接量:形如‘A’,变量中实际存储的是该字符的Unicode编码(无符号整数值),一个char型变量只能存储一个字符。示例如下:

char c1 = 'A';   
char c1 = 'A';

方式二:

整型直接量:范围在0~65535之间的整数,变量中实际存储的即该整数值,但表示的是该整数值所对应的Unicode字符。示例如下:

char c2 = 65;    
char c2 = 65;

Unicode形式:形如‘\u0041’,Unicode字符的16进制形式。示例如下:

char c3 = '\u0041'; 
char c3 = '\u0041';

5.3. 使用转义字符

字符直接量需要包含在一对’’单引号之中,那如果想表示单引号’的字符时,需要怎么表示?想表示回车、换行符时,怎么表示?

因为单引号为特殊意义的字符, 那么,对于不方便输出的字符可以采用转义字符来表示,示例代码如下:

char c = '\\';
System.out.println(c);  //输出的结果为:\ 
char c = '\\';
System.out.println(c);  //输出的结果为:\

常用转义字符如下图 – 2所示:

 

- 2

6. boolean类型

6.1. 使用boolean变量进行关系运算

boolean类型适用于关系、逻辑运算, 表示某个条件是否成立, 只允许取值true或false,true表示条件成立, 而false表示条件不成立。

boolean型变量经常用于存储关系运算的结果,所谓关系运算就是比较两个变量的大小相等等关系(此知识点,后续详细介绍)。boolean示例代码如下所示:

int age = 18;
boolean isChild = age<16;  
System.out.println(isChild);   // isChild的值为false
boolean running = true; 
boolean closed = false; 
int age = 18;
boolean isChild = age<16;  
System.out.println(isChild);   // isChild的值为false
boolean running = true;
boolean closed = false;

7. 基本类型间转换

7.1. 类型间转换

不同的基本类型直接可以相互转化,主要有两种方式:

自动类型转化(隐式类型转换):从小类型到大类型可以自动完成。类型的大小关系如下图 - 3所示:

 

- 3

强制转化:从大类型到小类型需要强制转换符,语法如下:

(需要转换成的类型)变量

因为大类型的精度值大于小类型,取值范围大于小类型,所以,当使用强制转化时,有可能会造成精度的损失或者溢出,所以,在使用强制转化时要求显式的告诉编译器,正在进行强制转换。

7.2. 强制转换时的精度丧失和溢出

基本类型转化如下示例所示,注意强制转换时可能会造成的精度丧失和溢出。

int a = 100;
int b = 200;
long c = a + b;  //自动将int转化为long 
long l1 = 1024l; 
int i = (int) l1;  //需要加强制转化符由于1024在int的范围内,所以没有产生溢出 
long l = 1024L * 1024 * 1024 * 4;
int j = (int) l;    //会产生溢出
System.out.println(j);  // 结果为:0 
double pi = 3.1415926535897932384;
float f = (float) pi;   //会造成精度的损失,因为单精度的精确度小于double
System.out.println(f);  //结果为:3.1415927 
int a = 100;
int b = 200;
long c = a + b;  //自动将int转化为long
 
long l1 = 1024l;
int i = (int) l1;  //需要加强制转化符由于1024在int的范围内,所以没有产生溢出
 
long l = 1024L * 1024 * 1024 * 4;
int j = (int) l;    //会产生溢出
System.out.println(j);  // 结果为:0
 
double pi = 3.1415926535897932384;
float f = (float) pi;   //会造成精度的损失,因为单精度的精确度小于double
System.out.println(f);  //结果为:3.1415927

7.3. 数值运算时的自动转换

如果在一个表达式中出现了多种数据类型,则运算结果会自动的向较大的类型进行转化,

示例如下:

//由于有long型的直接量参与,整个表达式的结果为long 
long distance = 10000 * 365 * 24 * 60 * 60 * 299792458l;
 
//由于有double型的直接量599.0参与,整个表达式的结果为 double 
double change = 800 - 599.0;
    
//结果为0.0,右边都是int型数据运算结果也为int类型,结果为0,再赋值给double
将0转化为 0.0
double persent1 = 80 / 100;  
//结果为0.8,右边表达式有double型直接量参与, 运算结果为double型
double persent2 = 80.0 / 100;  
//由于有long型的直接量参与,整个表达式的结果为long
long distance = 10000 * 365 * 24 * 60 * 60 * 299792458l;
 
//由于有double型的直接量599.0参与,整个表达式的结果为 double
double change = 800 - 599.0;
    
//结果为0.0,右边都是int型数据运算结果也为int类型,结果为0,再赋值给double
型,将0转化为 0.0
double persent1 = 80 / 100;
    
//结果为0.8,右边表达式有double型直接量参与, 运算结果为double型
double persent2 = 80.0 / 100;

7.4. byte、char、short转换为int

在前面所介绍的8种数据类型中,byte、char、short、int、long都表示整数类型,而整型的直接量为int,在实际使用中,为了方便使用,遵循了如下的规则:

int直接量可以直接赋值给byte、char和short,只要不超过其表示范围。示例如下:

byte  b  = 97;
short  s  = 97;
char  c  = 97;
byte  b  = 97;
short  s  = 97;
char  c  = 97;

byte、char、short三种类型参与运算时,先一律转换成int类型再进行运算。示例如下:

byte  b  =  97;
int  num = b + b;   //num的值为194

相关视频教程推荐:Java视频教程

以上是八種基本資料類型分別是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
Java中有哪些不同的垃圾收集算法(串行,並行,CMS,G1,ZGC)?Java中有哪些不同的垃圾收集算法(串行,並行,CMS,G1,ZGC)?Mar 14, 2025 pm 05:06 PM

本文討論了各種Java垃圾收集算法(串行,並行,CMS,G1,ZGC),它們的性能影響和適合大量堆的應用。

什麼是Java虛擬機(JVM),它在內部如何工作?什麼是Java虛擬機(JVM),它在內部如何工作?Mar 14, 2025 pm 05:05 PM

本文討論了Java虛擬機(JVM),詳細介紹了其在不同平台運行Java程序中的作用。它說明了JVM的內部流程,密鑰組件,內存管理,垃圾收集和性能Optimizatio

如何使用Java的Nashorn Engine用JavaScript腳本?如何使用Java的Nashorn Engine用JavaScript腳本?Mar 14, 2025 pm 05:00 PM

Java的Nashorn Engine可以在Java應用程序中啟用JavaScript腳本。關鍵步驟包括設置Nashorn,管理腳本和優化性能。主要問題涉及安全性,內存管理和未來兼容性

如何使用Java的Try-with-Resources語句進行自動資源管理?如何使用Java的Try-with-Resources語句進行自動資源管理?Mar 14, 2025 pm 04:59 PM

Java的Try-with-Resources通過自動關閉文件流或數據庫連接等資源來簡化資源管理,從而提高代碼可讀性和可維護性。

如何使用Java的枚舉來表示固定的值集?如何使用Java的枚舉來表示固定的值集?Mar 14, 2025 pm 04:57 PM

Java枚舉代表固定的值集,通過自定義方法和構造函數提供類型安全性,可讀性和其他功能。它們增強了代碼組織,可用於開關語句中以進行有效的價值處理。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版