這篇文章為你搞懂2個問題
- java 中有哪些資料類型可以用存儲資料?
- java 中的資料類型是怎麼轉換的?
在上一篇文章中我們學會了如何使用變量,像這樣存儲一個整數
int age=10;
,可以在開發工具中編寫一行這樣的代碼
int age=10.5;
就會發現開發工具報錯了,是因為變量中的資料類型也是不能随便用的。
資料類型
咱們先來看下面一組資料
如果每天花費2小時在交通上
1月=60小時=2.5天,
1年=730小時=30天,
50年=36500小時=1520天=4年
這段資料中可以分為以下2類,java中也包含這2大類
- 數值
中的1月
1
60小時
60
天中2.5
2.5
- 非數值
,
年
月
小時
-
- 整型
- byte
- short
- int
- long
- 浮點型
- float
- double
-
- char
- boolean
- String
數值型
下面看一下每個資料類型的詳細介紹
大小 | 取值範圍 | 介紹 | |
---|---|---|---|
1位元組8位 | -128 ~ +127 | 位元組型 這個範圍可以存儲普通人的年齡 | |
2位元組16位 | -32768~+3276 | 短整型 | |
4位元組32位 | -2147483648)~+2147483647 | 整型 存下中國人口的數量沒有問題,但是存下地球所有人的數量就不夠了 | |
8位元組64位 | -2^63 ~ + 2^63-1 | 長整型 存下地球的人數綽綽有餘 | |
單精度浮點數 存儲小數 | |||
雙精度浮點數 |
敲一敲:
public class DemoType {
public static void main(String[] args) {
//int類型使用
int numa=10+1;
System.out.println(numa);//輸出11
short numb=20;
//使用long類型時的值需要使用L作為字尾
long time=9223372036854775807L;
}
}
在使用 long 類型時使用不區分大小寫的 L 作為字尾标記與整型進行區分
使用其他整數時不需加字尾符号,注意指派的整數不超過類型範圍即可
public class DemoFloat {
public static void main(String[] args) {
float money=33.6f;
double length=55.07;
}
}
在使用單精度浮點數時需加上作為字尾,這是因為任何小數都會被認為是
f
在日常使用中建議使用
double
類型防止精度的丢失
double
非數值型
字元型 char
隻能存儲一個字元,值需要用一對單引号引起來,且單引号中隻能放一個字元
char sex='男';
字元串型 String
用于存儲一串字元,必須用一對雙引号引起來,另外需要注意的是 String 不是基本資料類型,而是 java 中的另一個概念
類
。
String username="極客大全";
String question="What's your name?\nHow old are you?";
類型用于存儲字元串,字元串可以拼接但不能用于數學運算
String
- 還可以使用一些
,這些字元可以用來表示一些特殊符号像 空格、換行
轉義字元
可以用來表示換行,之後的内容會另起一行
\n
可以表示一個制表符(
\t
鍵)
Tab
布爾型 boolean
用于存儲邏輯的結果,如:大象比人大的結果是真(
true
) 人比螞蟻小的結果是假(
false
)
boolean isbig=(1>10);
System.out.println("isbig:"+isbig);
boolean isequal=(100==3);
System.out.println("isequal:"+isbig);
boolean flag=false;
System.out.println("flag:"+flag);
類型的變量隻能存儲兩個值
boolean
或
true
還可以将邏輯比較後的結果(也是
false
true
)存入
false
資料類型轉換
隐式類型轉換
二花一個月前稱的體重為97.5斤,現在比一個月前剛好增加2斤,二花現在是多少斤?這是一個比較簡單的數學問題,正确結果是 99.5 斤,下面我們用代碼來模拟一遍。
public class DemoClac {
public static void main(String[] args) {
double weight=97.5;//一個月前的體重
int add=2;//增加的體重
double sum=weight+add;
System.out.println(sum);//輸出和
}
}
add 變量是一個整數類型,而 weight 是一個小數,兩者在相加後轉成了 double類型
這時發生的就是
隐式類型轉換
隐式類型轉換
就是自動類型轉換,滿足以下兩個規則即可發生
- 如果一個操作數為double類型,則整個表達式可提升為double類型
像上面的這個示例就是滿足這個規則
- 滿足自動類型轉換的條件:兩種類型要相容、目标類型大于源類型
例子1 :
double a=1;
1屬于整型,double 類型大于整型,即自動轉換
例子2 :
char chr=97;
System.out.println(chr);//輸出字元 a
char 類型相容 int 類型,每個整數存入char類型變量時都會映射一個字元,更多可以百度
ASCII
強制類型轉換
int sum=55.3+22;
System.out.println(sum);
我們想要一個整數的和,但上面的這段代碼運作時會報錯:
cannot convert from double to int
這是為什麼呢?根據前面學到的隐式類型轉換,當表達式中有操作數為 double類型時,整個表達式提升為 double,必須進行顯式強制類型轉換。
int sum=(int) (55.3+22);
System.out.println(sum);
這次的運作成功,運作的結果為
77
強制類型轉換往往是從寬度大的類型轉換為寬度小的類型,會使數值損失精度
試一試
- 下面運算的結果是多少?為什麼?
int a=5;
int b=2;
int c=a/5;
System.out.println(c);
- 上一個練習中的代碼如何讓運算結果更精準?
- 下面素材中生成随機小數,修改素材生成 1-10 的随機整數
搜尋關注公衆号「享智同行」,第一時間擷取技術幹貨public class DemoRandom { public static void main(String[] args) { double random=Math.random(); System.out.println(random); } }