資料型別
- 🍎前言
- 🍦變數
- 🐱?🚀常量
- 🚲變數
- 🌳生命周期及作用域
- 🚆變數的命名規則
- 🤳資料型別
- 🥪基本資料型別,
- 💕字串型別,
- 🔨轉義字符
- 🍚型別轉換
- 🤢為什么要有型別轉換
- 🦝算數型別轉換(數值提升)
- 🥛強制型別轉換
- 🏆整型和字串型別之間的小故事
- 🎨整型和字串型別的相互轉換
- 😑整型和字串型別的拼接
- 🐱?🏍總結
🍎前言
哈嘍大家好,我是Aaron,每一種不同的計算機語言,都會有一定標準的對資料型別的規范,Java也不例外,文本內容將詳細介紹有關Java中常見的資料型別,
Java是強型別語言,所以本文將會以和弱型別語言的C語言做對比的形式闡述Java的魅力,

所有的資料型別,都是圍繞著變數來闡述的,沒有變數,談論資料型別則是沒有意義的,接下來我們先介紹變數的概念,
🍦變數
在計算機語言中,存在常量和變數的概念,
🐱?🚀常量
在Java中,常量分為兩種:
- 字面常量,
也就是我們平常說的數字或者字符/字串常量,
一般的字面常量有:
| 數值 | 型別 |
|---|---|
| 024 | int 型常量(10進制) |
| 024 | int 型常量(8進制) |
| 0x5f | int型常量(16進制) |
| 32L | long型常量 |
| 3.14f | float型常量 |
| 5.18lf | double型常量 |
| 1.2e3 | double型指數常量,表示1.2?103 |
| ‘a’ | char型別字符常量 |
| “abcx” | 字串常量 |
| true | boolean型別字面值常量 |
- final修飾的常變數,
這里可以類比為C語言中const修飾的常變數,本質是個變數,但只能被初始化一次,初始化之后其值不能再被修改,
如:
final int A = 10;
A = 20; // 報錯,因為final修飾的變數不可被改變,它具有了常屬性
常量是存放在常量區的,但以上兩種不同常量也存在區別:
- 字面常量:
在編譯時,字面常量會被翻譯成位元組碼存放在位元組碼檔案(.class檔案)中,
- final修飾常量
會在堆疊中創建堆疊幀,為其分配空間,但也是在編譯時就確定其值,
(注:變數是在運行時計算,確認其值)
🚲變數
變數分為:
- 區域變數,
- 成員變數,
而成員變數分為:
- 普通成員變數,
普通成員變數的定義介于類和方法之間,例:
public class DataType {
int a = 10;
public static void main(String[] args) {
}
}
這里的變數a就是普通成員變數,
- 靜態成員變數,
靜態成員變數就是用static修飾的變數,例如,
static int a = 0;
🌳生命周期及作用域
在Java中,同樣存在變數的生命周期及作用域,這兩個概念和C語言中相似,這里便不過多介紹,只需要注意變數的作用域在代碼塊( { } )內即可,
如:
public class DataType {
// int a = 10;
public static void main(String[] args) {
int a = 10;
{
a = 20;
}
{
int b = 10;
}
b = 20;
}
}
這里變數a的定義和賦值沒有任何問題,但變數b就會報錯,因為對b進行賦值的時候,他已經出了所處的代碼塊( { } )內,該變數已被銷毀,
🚆變數的命名規則
變數的命名規則有兩個指標:
- 硬性指標
- 變數名只能由字母,數字,下劃線,美元符號($)組成,
- 變數名不能以數字開頭,
- 變數名需要區分大小寫,如NUM和num不是同一個變數,
- 軟性指標
- 變數名需要有描述性,即見名知意,
- 變數名不要使用漢語拼音~
- 變數名推薦小駝峰命名法,
- 變數名推薦使用名詞詞性進行命名,
變數的命名和類的命名需要加以區別,類的命名我們習慣上使用大駝峰命名,比如本文中博主代碼中常見的:
public class DataType {
}
這里的DataType采用的就是大駝峰命名法,所有的英文單詞首字母都要大寫,
而變數的命名則需要采用小駝峰命名法,
小駝峰命名:
- 第一個單詞首字母小寫,其他單詞首字母大寫,
- 所有字母全小寫,單詞之間用下劃線分割,
如:
int numDigit = 0;
或者:
int num_digit = 0;
在習慣上:final修飾的常量名用大寫字母表示,變數名用小寫字母表示
🤳資料型別
Java提供了各種豐富的資料型別,以便不同變數可更加有效地存放資料,
資料型別又分為兩大塊:
- 基本資料型別,
- 參考型別,
但參考型別涉及面不同,例如陣列,字串,介面等等,每一個博主都可以專門出一篇文章詳細介紹,所以這里就不過多贅述,本文只將基本資料型別詳細介紹即可,
🥪基本資料型別,
資料型別如下:
| 資料型別 | 所占空間大小 |
|---|---|
| boolean | 1bit/1byte(由編譯器決定,Java未給出標準大小) |
| byte | 1byte |
| char | 2byte(C語言中是一個位元組) |
| short | 2byte |
| int | 4byte |
| float | 4byte |
| long | 8byte |
| double | 8byte |
接下來逐一介紹,
布爾資料型別(boolean)
在Java中有布爾型別,其回傳值只能是true/false,并且因為Java是強型別語言,所以和C語言不同,不存在0表示假,非0表示真這種說法,
所以下面這種寫法就是堅決錯誤的,
public class DataType {
public static void main(String[] args) {
while (1) //錯誤寫法
{
System.out.println(1);
}
}
}
這種寫法編譯器會給報錯,

報錯資訊顯示:int無法轉換為boolean型別,是因為while回圈的判斷運算式必須是布爾型別的運算式,而布爾運算式的回傳值只能是true/false,而不能是1,
就像上面說的,不僅僅是while回圈,類似的,if陳述句的判斷運算式也只能是布爾運算式,
并且,boolean型別是無法與其他型別之間相互轉換的,不論是強制型別轉換還是自動轉換,都無法做到!
位元組資料型別(byte)
在Java中新增了一個byte型別,其大小為1個位元組,可以存放-128~127之間及其所對Unicode碼字符的資料,
如果所存放的資料超過其范圍,將會發生報錯,如:
public class DataType {
public static void main(String[] args) {
byte a = 128;
System.out.println(a);
}
}

因為編譯器認為128超過了byte的取值范圍,所以認為他是int型別的資料,而Java是強型別語言,就直接報錯了,如果是C語言這樣的弱型別語言可能只會給個警告哦~
注意:
很多初學者會將位元組型別和字符型別混為一談,他們二者沒有任何聯系哦~只是簡單的將一個位元組大小內的資料型別叫做位元組型別而已 ~ ~
字符資料型別(char)
在Java中的字符資料型別區別于C語言中的字符型別,在C語言中的字符型別只占1個位元組,類似于Java中的位元組型別,但在Java中的字符型別被擴展為-256~255,也就是**占兩個位元組
**,
并且Java中是支持中文的,例如:
char a = '張';
中文占空間大小為兩個位元組,當然,我們自己寫代碼的時候除非特殊需要的情況,盡量避免這樣賦值,
加一個題外話,在Java中,甚至可以將中文作為變數名!!!
如:
public class DataType {
public static void main(String[] args) {
int 張 = 3;
System.out.println(張);
}
}
運行結果為:

當然了,我們是堅決抵制這種"別扭"的編碼風格的,還有很多Java書寫格式,都在阿里巴巴Java開發手冊(嵩山版)中,有興趣的小伙伴可以去看一看,該書目前沒有紙質版,只有電子書,如果找不到資源可以私聊博主拿書~
回歸正題,char型別賦值的數字將會被轉換為字符,我們在學習C語言的時候知道,是按照ASCII碼對應,但Java中不是ASCII碼,而是將其進行擴展,擴展到255個數字對應字符,稱為,Unicode碼,
短整型資料型別(short)
短整型資料型別同樣也是占2個位元組,其存取范圍為:-32768~32767,但這個資料型別并不常用,其范圍較小,可能造成越界等等問題,所以一般情況下我們選擇使用int資料型別,
簡單舉個小例子演示一下短整型的用法,
public class DataType {
public static void main(String[] args) {
short a = 10;
System.out.println(a);
}
}

整形資料型別(int)
int型資料型別,也就是整型資料型別,是我們寫代碼中最常見的一種資料型別,
但在這里需要著重講一下,到底什么叫做Java是強型別語言,
我們知道,在C語言中,某些編譯器底下會認為,32位平臺機器下的int型別是占兩個位元組的,而64位平臺機器下int型別是占4個位元組的,
而Java作為強型別語言,就不存在這種模棱兩可的情況,不管是在多少位的平臺下,int型別永遠都是4個位元組,
而4個位元組的范圍是:-231 -> 231-1,也就是大概 -21億~21億,
這個范圍足夠大,所以我們定義整型變數時大多使用int型別,
如果有小伙伴不放心博主說的范圍,可以通過代碼的方式在編譯器下確認:
System.out.println(Integer.MAX_VALUE); //int型別的最大值
System.out.println(Integer.MIN_VALUE); //int型別的最小值
這兩行代碼可以分別列印出int型別的最大值和最小值,

這里的Integer是int型別的包裝類,所有的基本資料型別都有自己的包裝類,在包裝類中存在很多屬于他們自己的一些方法,可以通過上面代碼的形式進行呼叫,
單精度浮點型資料型別(float)
單精度浮點型變數 - float
占4個位元組大小,具體數值范圍可參考int型別資料變數,
基本用法:
public class DataType {
public static void main(String[] args) {
float f = 4.5f;
System.out.println(f);
}
}

這里要注意,4.5后面需要跟一個f,因為編譯器會默認4.5屬于雙精度型別(double),而4.5f表示我明確規定這個數是屬于單精度浮點型的,
如果不加上這個f,編譯器則會直接報錯,因為認為我們將一個雙精度資料存放進一個單精度變數中,這是非法的~
示例:
public class DataType {
public static void main(String[] args) {
float f = 4.5;
System.out.println(f);
}
}
報錯結果:

這里提示我們將double型別轉換位float型別,屬于非法操作~如果是C語言,則只會提出警告,但Java是強型別語言,所以編譯器會直接報錯 ~ ~
單精度浮點型資料的存取規則符合IEEE標準,詳細可以看博主之前的博文:【資料型別存盤原理】資料的存盤 - 深度剖析資料在記憶體中的存盤
在本文中博主詳細整理了資料存盤的有關知識,
長整型資料型別(long)
在生活中,總存在一些我們希望特別大的數值,比如薪水哈哈哈哈,那當然是多多益善,那如果這個值太大,超過了int型別怎么辦?
所以Java中還有一種資料型別叫做長整型資料型別,所占空間大小位8個位元組,這里需要再次強調,Java是強型別語言,所以不存在32位機器long型別占4個位元組,64位機器占8個位元組的說法,不論在多少位平臺機器下,long型別資料永遠都是占8個位元組,
long型別用法:
public class DataType {
public static void main(String[] args) {
long a = 10L;
System.out.println(a);
}
}

這里的L并不是跟上文中的float型別中的f一樣非加不可的,可以省略,但最好還是加上,以示區分~~
那么在Java的long型別下,我們的薪水上限到底是多少呢~
下面通過編譯器幫我們計算一下,
public class DataType {
public static void main(String[] args) {
System.out.println(Long.MAX_VALUE);
System.out.println(Long.MIN_VALUE);
}
}

我們可以看到這個數字大概也就是是9百多萬萬億,估計是夠我們用的了~~
雙精度浮點型資料型別(double)
double型別同樣是不論在多少位的平臺下,都是8個位元組,這里展示一下8個位元組的大小~
public class DataType {
public static void main(String[] args) {
System.out.println(Double.MAX_VALUE);
System.out.println(Double.MIN_VALUE);
}
}

這里介紹兩個初學者難以理解的代碼:
- 代碼一:
public class DataType {
public static void main(String[] args) {
int a = 1;
int b = 2;
System.out.println(a/b);
double c = 1.0;
double d = 2.0;
System.out.println(c/d);
}
}
運行結果:

可以看到,第一個結果是0,那么它為什么不是0.5呢?
原因是用int型別進行計算,得到的結果也只能是int型別的,所以小數點后面的位直接被舍去了~(不是四舍五入哦 ~)
- 代碼二:
public class DataType {
public static void main(String[] args) {
double n = 1.1;
System.out.println(n*n);
}
}
運行結果:

可以看到,運行結果最后出現了個2,這并不是我們預期的結果,是這個程式出bug了嘛?
答案是否定的,因為Java規定了雙精度浮點型只能精確到小數點后15位,所以小數點后15位之后的資料,并不能保證其準確性,
以上就是有關于Java當中8中基本資料型別的詳解~
如果有什么問題歡迎評論區留言或者私聊博主嗷~~
💕字串型別,
我們知道在C語言中是沒有字串型別的,但在Java中有,它不屬于8大基本資料型別之一,其實它是屬于參考型別(存盤地址的型別被稱為參考型別),
其實我們在main函式中就可以看的出來,
public static void main(String[] args) {
}
main函式的引數中就有一個字串型別的字符陣列,其陣列名位args,這里可以看到,Java中對陣列的命名習慣和C語言不同,
C語言中習慣先寫陣列名,后寫中括號,而Java中正好相反,先寫中括號,再寫陣列名,
陣列相關的知識博主將會在本專欄后期給大家專門出一期博文分享~
🔨轉義字符
在Java中常用到的轉義字符不多,列出以下幾個:
| 轉義字符 | 釋義 |
|---|---|
| \n | 換行 |
| \t | 制表符 |
| ’ | 將其轉義為普通的字符單引號 |
| " | 將其轉義為普通的字符雙引號 |
| \ | 將其轉義為普通的字符斜杠 |
轉移字符只需記住其用法即可,
給出以下幾個例子:
- 列印出:‘hello’
- 列印出:"“hello”"
- 列印出:“hello”
public class DataType {
public static void main(String[] args) {
System.out.println("\'hello\'");
System.out.println("\"\"hello\"\"");
System.out.println("\\\"hello\\\"");
}
}
運行結果:

🍚型別轉換
Java中的型別轉換分為兩種:
- 算數型別轉換(又被稱為數值提升)
- 強制型別轉換
在了解這兩種型別轉換之前,應該先明白為什么要有型別轉換,
🤢為什么要有型別轉換
我們知道,Java是一門強型別的語言,所以絕不允許在資料型別上出現差池,
例如:
int a = 3;
float f = 3.14;
a = f; // 將單精度浮點型資料存放進整型變數a中
這種做法在Java當中是絕對不會允許的,但有的時候我們又不得不將某一些資料存放到不同的資料型別中,于是就出現了型別轉換的概念,
總結一下: 出現資料型別轉換的原因是為了防止將高精度資料存放進低精度變數時發生精度丟失,而如果將低精度的資料存放進高精度變數中則可以正常運行,
如:
public class DataType {
public static void main(String[] args) {
int i = 3;
long l = 0;
l = i;
System.out.println(l);
}
}

這里并沒有發生報錯,可見,出現型別轉換的原因就是為了防止高精度資料存盤進低精度變數時發生精度丟失,
🦝算數型別轉換(數值提升)
算數型別轉換,顧名思義,就是在計算中自動進行的型別轉換,比如:
public class DataType {
public static void main(String[] args) {
int a = 10;
double d = 3.14;
System.out.println(a + d);
}
}

這就是算數型別轉換,
進行算數型別轉換的原因其實是為了提高運算效率,一般都是低精度型別轉為高精度型別,整型資料轉為浮點型資料型別,
🥛強制型別轉換
強制型別轉換是指我們將某一些不屬于這個資料型別的資料,強行轉換為該型別的資料,然后進行存盤,
比如:
int a = (int)3.14;
但是注意,強制型別轉換雖然好用,但它會造成一定程度上的精度丟失,比如這里的變數a,它其實存盤的只是3,小數點后面的資料將會發生截斷丟失,
public class DataType {
public static void main(String[] args) {
int a = (int)3.14;
System.out.println(a);
}
}

但是注意一點,布爾型別(boolean)是不能和其他型別進行計算的,哪怕經過強制轉換也不可以,因為布爾型別屬于邏輯的真偽,而其他型別屬于算數運算,怎么能把邏輯針灸啊和算數運算放在一起計算呢?
而且對于邏輯真偽自己本身來說,也是無法進行計算的,
比如:
public class DataType {
public static void main(String[] args) {
boolean a = true;
boolean b = false;
System.out.println(a+b);
}
}
運行結果:

這里給出報錯,說+這個運算子的運算元不對,因為+屬于算數運算子,只能對算數型別的資料進行運算,而布爾型別只能通過邏輯運算子進行計算,其結果仍然是邏輯真和邏輯假,
本文并不是主要將運算子的文章,博主預計過兩天在本專欄內補上運算子的文章,有需要的小伙伴可以關注一波該專欄哦~專欄更新新文不錯過 ~
🏆整型和字串型別之間的小故事
整型和字串型別其實是兩個八竿子打不到一塊兒去的兩個不同的型別,但他們之中可以產生兩個有意思的東西,
- 進行相互轉換
- 進行拼接
🎨整型和字串型別的相互轉換
在Java中,整型資料和字串型別資料的轉換是很容易實作的,只需要在各自的類中呼叫valueOf方法,即可轉換其資料型別,
(int沒有類,但它有包裝類Integer)
如:
- 整型轉換為字串型別
public class DataType {
public static void main(String[] args) {
int num = 10;
String str = String.valueOf(num);
System.out.println(str);
}
}
運行結果:

這里將整型的資料通過valueOf方法轉換為了字串型別并存放在了變數str中,完成了整型到字串型別的轉換,
- 字串型別轉換為整型
public class DataType {
public static void main(String[] args) {
String str = "10";
int a = Integer.valueOf(str);
System.out.println(a);
}
}
運行結果:

這里字串型別變數str中存放的是一個常量字串10,而用包裝類Interger中的valueOf方法將其轉換為了整型資料,這就完成了字串型別到整型資料的轉換,
😑整型和字串型別的拼接
在字串中,"+"號表示字串的拼接,例如:
public class DataType {
public static void main(String[] args) {
System.out.println("abc"+"def");
}
}
運行結果:

這就通過"+"完成了字串的拼接,
而字串也可以和整數完成拼接:
public class DataType {
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println("a = "+a+","+"b = "+b);
}
}
運行結果:

這就完成了整數型別和字串型別的拼接,
當然,也可以通過不適用整型變數的形式完成拼接,
如下:
public class DataType {
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println("a = "+10+","+"b = "+20);
}
}
運行結果:

以上兩點就是整型和字串型別之間撞出的小火花啦~
🐱?🏍總結
本文的知識點偏基礎,但要著重區分Java中資料型別和C語言中的差別,不能混淆,
而本文的重點在于理解Java是一門強型別的計算機語言,允許低精度資料存放在高精度變數中,但絕不允許高精度資料存放在低精度資料中 ,為了避免報錯,可以使用強制型別轉換的方法,但要知道強制型別轉換大概率會發生精度的丟失,
以上就是本文的全部內容,希望可以對大家有幫助,
最后期待一波各位的小手指動一動~給個三連走一波吧 ~ ~
👍點贊👍 + 👀關注👀 + ??收藏??
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/319711.html
標籤:java
