一斋荞、數(shù)據(jù)類型轉(zhuǎn)換
變量定義賦值的時(shí)候, 值得在取值范圍之內(nèi),自動(dòng)轉(zhuǎn)換. 如果超出了接收類型的范圍, 需要強(qiáng)轉(zhuǎn)
1. 自動(dòng)轉(zhuǎn)換
自動(dòng)轉(zhuǎn)換也叫隱式轉(zhuǎn)換沧侥,是代碼執(zhí)行過程中取值范圍小的類型自動(dòng)轉(zhuǎn)換為取值范圍大的類型爸邢。
轉(zhuǎn)換規(guī)則
數(shù)據(jù)類型的范圍大小排序
byte咏花、short龄恋、char < int < long < float < double
范圍小的類型向范圍大的類型轉(zhuǎn)換疙驾,但是byte、short郭毕、char在運(yùn)算過程中是直接轉(zhuǎn)換為int
byte b1=1;
byte b2=1;
byte b3=b1+b2; //這里會(huì)報(bào)錯(cuò)它碎,在運(yùn)算過程中byte自動(dòng)轉(zhuǎn)換為int,運(yùn)算后就不能再用byte接收显押,b3應(yīng)為int類型
System.out.println(b3);
short s1=1;
short s2=1;
short s3=s1+s2;//這里和上邊的byte報(bào)錯(cuò)一樣扳肛,s3應(yīng)為int類型
System.out.println(s3);
char c1=1;
char c2=1;
char c3=c1+c2;//c3應(yīng)為int類型
System.out.println(c3);
2. 強(qiáng)制轉(zhuǎn)換
強(qiáng)制轉(zhuǎn)換就是把一個(gè)范圍大的數(shù)據(jù)類型強(qiáng)制轉(zhuǎn)換為范圍小的數(shù)據(jù)類型,
轉(zhuǎn)換格式:
int i1 =(int)1.0;
數(shù)據(jù)類型 變量名 = (數(shù)據(jù)類型)被轉(zhuǎn)數(shù)據(jù)值乘碑;
舉例:
int a = 2.0; //在編譯階段就會(huì)報(bào)錯(cuò)挖息,不兼容類型,需要從double轉(zhuǎn)換為int兽肤,可能會(huì)有損失
System.out.printl(a);
//如果一定要轉(zhuǎn)換的話
int b = (int)2.2;
System.out.printl(b); //結(jié)果為2套腹,小數(shù)點(diǎn)后的沒有了,這就造成了精度損失
下邊通過一個(gè)簡單的例子介紹一下強(qiáng)制轉(zhuǎn)換的原理:
byte占用一個(gè)字節(jié)资铡,取值范圍是[-128电禀,127],如果我們把257強(qiáng)制轉(zhuǎn)換為byte呢笤休?
byte a = (byte)257;
System.out.println(a); //運(yùn)行發(fā)現(xiàn)結(jié)果為1
造成這一結(jié)果的原因:
強(qiáng)制轉(zhuǎn)換要注意:
- 精度損失:浮點(diǎn)轉(zhuǎn)換為整數(shù)直接取消小數(shù)點(diǎn)尖飞,舍棄小數(shù)點(diǎn)后的數(shù)據(jù)
- 數(shù)據(jù)溢出:范圍大的數(shù)據(jù)類型轉(zhuǎn)換為范圍小的類型,有可能超過范圍小的數(shù)據(jù)類型的取值范圍店雅,造成數(shù)據(jù)丟失政基。
3. ASCII編碼表
編碼表 就是將人類的字符和一個(gè)十進(jìn)制數(shù)進(jìn)行對(duì)應(yīng)起來組成一張表格。表中每個(gè)文字都對(duì)應(yīng)了一個(gè)數(shù)值底洗,如下:
字符 | 數(shù)值 |
---|---|
0 | 48 |
9 | 57 |
A | 65 |
Z | 90 |
a | 97 |
z | 122 |
這些只用記得幾個(gè)就可以腋么,其他的可以直接推斷出來。
二亥揖、運(yùn)算符
1. 算數(shù)運(yùn)算符
算數(shù)運(yùn)算符包括: | |
---|---|
+ |
加法運(yùn)算珊擂,字符串連接運(yùn)算 |
- |
減法運(yùn)算 |
* |
乘法運(yùn)算 |
/ |
除法運(yùn)算 |
% |
取模運(yùn)算,兩個(gè)數(shù)字相除取余數(shù) |
++ 费变、 --
|
自增自減運(yùn)算 |
運(yùn)算符兩側(cè)的數(shù)據(jù)類型要一致摧扇,(byte、short挚歧、char類型自動(dòng)轉(zhuǎn)換為int)
int a = 10;
int b = 20;
int c = a + b ;//a,b都是int類型扛稽,可以賦值給int類型的c
byte x = 1;
byte y = 2;
byte z = x + y; //這樣會(huì)報(bào)錯(cuò),因?yàn)樵谶\(yùn)算過程中滑负,byte轉(zhuǎn)換成了int在张,如果還需要用byte接收需要強(qiáng)制轉(zhuǎn)換用含,可能會(huì)有損失
int z1 = x + y; //需要int類型的變量接收,因?yàn)檫\(yùn)算結(jié)果提升到了int
運(yùn)算兩側(cè)的類型不一致時(shí)帮匾,結(jié)果要和大的數(shù)據(jù)類型保持一致
double a = 100;
int b = 10;
int c = a + b; //錯(cuò)誤啄骇;運(yùn)算結(jié)果從double轉(zhuǎn)換為int可能會(huì)有精度損失,編譯報(bào)錯(cuò)
double c = a + b;//當(dāng)運(yùn)算的兩個(gè)數(shù)據(jù)的數(shù)據(jù)類型不一致時(shí)瘟斜,接收結(jié)果的變量數(shù)據(jù)類型與大的范圍的數(shù)據(jù)類型保持一致
2. ++缸夹、--運(yùn)算符
獨(dú)立運(yùn)算:變量在獨(dú)立運(yùn)算時(shí),前++和后++沒有區(qū)別螺句,都是實(shí)現(xiàn)自動(dòng)加1的功能
i++; ++i;
混合運(yùn)算:和其他變量放一起時(shí)就有區(qū)別虽惭。
比如:++i是先把i+1在運(yùn)算
int a = 1;
int b = ++a;
System.out.println(a);//計(jì)算結(jié)果是2
System.out.println(b);//計(jì)算結(jié)果是2
變量a自己加1,將加1后的結(jié)果賦值給b蛇尚,也就是說a先 +1 計(jì)算得到2芽唇,然后復(fù)制給b,
因此,a和b的結(jié)果都是2佣蓉。
i++:先取值后運(yùn)算
int a = 1;
int b = a++;
System.out.println(a);//計(jì)算結(jié)果是2
System.out.println(b);//計(jì)算結(jié)果是1
變量a先把自己的值1賦值給變量b披摄,此時(shí)變量b的值就是1。然后變量a再去自己再加1勇凭。
因此,a的結(jié)果是2义辕,b的結(jié)果是1虾标。
3. +字符串中的拼接作用
+
符號(hào)在遇到字符串的時(shí)候,表示連接灌砖、拼接的含義璧函。
"a"+"b"的結(jié)果是“ab”,連接含義
System.out.println("5+5="+5+5);//輸出5+5=55
注意:當(dāng)?shù)篮图臃ㄟ\(yùn)算結(jié)合在一起的時(shí)候,要注意用() 提升運(yùn)算優(yōu)先級(jí)
4. 賦值運(yùn)算符
運(yùn)算符 | 說明 |
---|---|
= |
等于號(hào) |
+= |
加等于 |
-= |
減等于 |
*= |
乘等于 |
/= |
除等于 |
%= |
取模等 |
- 賦值運(yùn)算符 =
將=
右邊的值基显,賦給左邊的變量蘸吓。其實(shí)我們昨天在學(xué)習(xí)定義變量的時(shí)候就接觸了。如
int i1 = 5; //將整數(shù)常量5賦值給i1撩幽。
int i2 =i1; //將i1變量的值賦值給i2變量库继。
int i3 =i1+i2; //將i1+i2的運(yùn)算結(jié)果賦值給變量i3
- +=,-=窜醉,*=宪萄,/=,%=
運(yùn)算符和賦值符的結(jié)合使用榨惰。當(dāng)運(yùn)算的時(shí)候拜英,有時(shí)我們會(huì)遇到如下運(yùn)算需求:
int i1=10;
i1=i1+100;//變量自身參與運(yùn)算,結(jié)果賦值返回給自身
i1+=100;
System.out.println(i1);
//其他幾個(gè)運(yùn)算符也是一樣使用
- += ,-=,*=,/=,%=:自動(dòng)類型強(qiáng)轉(zhuǎn)功能
在運(yùn)算過程中琅催,如果涉及到值強(qiáng)轉(zhuǎn)居凶,會(huì)自動(dòng)操作不需要我們手動(dòng)轉(zhuǎn)換虫给;
byte b1=1;
//b1= b1+ 256;//編譯報(bào)錯(cuò)
b1+=256;
System.out.println(b1);//值為1,而不是257. int 強(qiáng)轉(zhuǎn)為 byte 侠碧,溢出
int i1=10;
i1*=1.234;
System.out.println(i1);//值為12狰右,而不是12.34 double 強(qiáng)轉(zhuǎn)為 byte ,精度損失
5. 比較運(yùn)算符
比較運(yùn)算符 | 說明 |
---|---|
== |
比較符號(hào)兩邊數(shù)據(jù)是否相等舆床,相等結(jié)果是true棋蚌。 |
< |
比較符號(hào)左邊的數(shù)據(jù)是否小于右邊的數(shù)據(jù),如果小于結(jié)果是true挨队。 |
> |
比較符號(hào)左邊的數(shù)據(jù)是否大于右邊的數(shù)據(jù)谷暮,如果大于結(jié)果是true。 |
<= |
比較符號(hào)左邊的數(shù)據(jù)是否小于或者等于右邊的數(shù)據(jù)盛垦,如果小于結(jié)果是true湿弦。 |
>= |
比較符號(hào)左邊的數(shù)據(jù)是否大于或者等于右邊的數(shù)據(jù),如果大于結(jié)果是true腾夯。 |
!= |
不等于符號(hào) 颊埃,如果符號(hào)兩邊的數(shù)據(jù)不相等,結(jié)果是true蝶俱。 |
比較運(yùn)算符班利,是兩個(gè)數(shù)據(jù)之間進(jìn)行比較的運(yùn)算,運(yùn)算結(jié)果都是布爾值true
或者false
榨呆。
public static void main(String[] args) {
System.out.println(1==1);//true
System.out.println(1<2);//true
System.out.println(3>4);//false
System.out.println(3<=4);//true
System.out.println(3>=4);//false
System.out.println(3!=4);//true
}
6. 邏輯運(yùn)算符
邏輯運(yùn)算符其實(shí)就是與(并且)罗标,或(或者),非(不是)
积蜻,用來連接兩個(gè)布爾類型結(jié)果
的運(yùn)算符闯割。其運(yùn)算結(jié)果都是布爾值(true
或false
)
邏輯運(yùn)算符 | 稱呼 | 使用說明 | ||
---|---|---|---|---|
&& |
雙與 短路與 |
1. 兩邊都是true,結(jié)果是true 2. 一邊是false竿拆,結(jié)果是false 短路特點(diǎn):****一假即假宙拉。符號(hào)左邊是false,右邊不再運(yùn)算丙笋,效率比單與高谢澈。 |
||
` | ` | 短路或 雙或 |
1. 兩邊都是false,結(jié)果是false <br />2. 一邊是true不见,結(jié)果是true <br />短路特點(diǎn):一真即真澳化,符號(hào)左邊是true,右邊不再運(yùn)算稳吮,效率比單或高 | |
缎谷! |
取反 | 1. ! true 結(jié)果是false<br />2. ! false結(jié)果是true 不是女 !女 -->男 |
7. 三元運(yùn)算符
當(dāng)一個(gè)布爾表達(dá)式的結(jié)果( true 或者 false) 需要對(duì)應(yīng)兩種不同的結(jié)果時(shí), 我們可以使用三元運(yùn)算符.
表達(dá)式可: 由變量
或常量
和操作符
組成的式子構(gòu)成。
三元運(yùn)算符格式:
數(shù)據(jù)類型 變量名 = 布爾類型表達(dá)式 ? 真值 :假值;
1. 布爾類型表達(dá)式結(jié)果是true列林,三元運(yùn)算符整體結(jié)果為真值瑞你,賦值給變量。
2. 布爾類型表達(dá)式結(jié)果是false希痴,三元運(yùn)算符整體結(jié)果為假值者甲,賦值給變量。
注意: 后面真值和假值的數(shù)據(jù)類型要和 變量接收的類型要匹配
int score = 59砌创;
String status= score>=60 ? "及格" : "不及格" ; // 不及格
System.out.println(status); // score=80 及格 score=59 不及格
更多Java相關(guān)文章虏缸、資料,可以關(guān)注公眾號(hào)故里學(xué)Java嫩实,回復(fù)資源包獲取