數(shù)據(jù)類型轉(zhuǎn)換灯抛、運(yùn)算符(基礎(chǔ)篇三)

一斋荞、數(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é)果的原因:

1526549972053.png

強(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)
+= 加等于
-= 減等于
*= 乘等于
/= 除等于
%= 取模等
  1. 賦值運(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
  1. +=,-=窜醉,*=宪萄,/=,%=

運(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)算符也是一樣使用
  1. += ,-=,*=,/=,%=:自動(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é)果都是布爾值(truefalse

邏輯運(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ù)資源包獲取

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末刽辙,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子甲献,更是在濱河造成了極大的恐慌宰缤,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件晃洒,死亡現(xiàn)場離奇詭異慨灭,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)球及,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門氧骤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人桶略,你說我怎么就攤上這事语淘。” “怎么了际歼?”我有些...
    開封第一講書人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長姑蓝。 經(jīng)常有香客問我鹅心,道長,這世上最難降的妖魔是什么纺荧? 我笑而不...
    開封第一講書人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任旭愧,我火速辦了婚禮,結(jié)果婚禮上宙暇,老公的妹妹穿的比我還像新娘输枯。我一直安慰自己,他們只是感情好占贫,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開白布桃熄。 她就那樣靜靜地躺著,像睡著了一般型奥。 火紅的嫁衣襯著肌膚如雪瞳收。 梳的紋絲不亂的頭發(fā)上碉京,一...
    開封第一講書人閱讀 52,328評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音螟深,去河邊找鬼谐宙。 笑死,一個(gè)胖子當(dāng)著我的面吹牛界弧,可吹牛的內(nèi)容都是我干的凡蜻。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼垢箕,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼划栓!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起舰讹,我...
    開封第一講書人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤茅姜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后月匣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钻洒,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年锄开,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了素标。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡萍悴,死狀恐怖头遭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情癣诱,我是刑警寧澤计维,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站撕予,受9級(jí)特大地震影響鲫惶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜实抡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一欠母、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧吆寨,春花似錦赏淌、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春缩擂,著一層夾襖步出監(jiān)牢的瞬間鼠冕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來泰國打工胯盯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留懈费,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓博脑,卻偏偏與公主長得像憎乙,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子叉趣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359