01-02 數(shù)據(jù)類型轉(zhuǎn)換、運(yùn)算符、方法入門

第一章 數(shù)據(jù)類型轉(zhuǎn)換


java程序中要求參與的計(jì)算的數(shù)據(jù),必須要保證數(shù)據(jù)類型的一致性,如果數(shù)據(jù)類型不一致將發(fā)生類型的轉(zhuǎn)換。

1.1 自動(dòng)轉(zhuǎn)換


一個(gè)int類型變量和一個(gè)byte類型變量進(jìn)行加法運(yùn)算,結(jié)果會(huì)是什么數(shù)據(jù)類型?

int i = 1;
byte b = 2;

運(yùn)算結(jié)果,變量的類型將是int類型,這就是出現(xiàn)了數(shù)據(jù)類型的自動(dòng)類型轉(zhuǎn)換現(xiàn)象。

  • 自動(dòng)轉(zhuǎn)換:將取值范圍小的類型自動(dòng)提升為取值范圍大的類型
public static void main(String[] args) { 
      int i = 1;
      byte b = 2;

      // byte x = b + i; // 報(bào)錯(cuò)
      //int 類型和  byte 類型運(yùn)算,結(jié)果是  int 類型  
      int j = b + i;
      System.out.println(j);
}
轉(zhuǎn)換原理圖解

byte類型內(nèi)存占有1個(gè)字節(jié)闰非,在和int類型運(yùn)算時(shí)會(huì)提升為int類型,自動(dòng)補(bǔ)充3個(gè)字節(jié)纱控,因此計(jì)算后的結(jié)果還是int類 型舶掖。

同樣道理,當(dāng)一個(gè)int類型變量和一個(gè)double變量運(yùn)算時(shí),int類型將會(huì)自動(dòng)提升為double類型進(jìn)行運(yùn)算雏蛮。

public static void main(String[] args){ 
      int i = 1;
      double d = 2.5;
      //int類型和double類型運(yùn)算衷模,結(jié)果是double類型 
       //int類型會(huì)提升為double類型
      double e = d+i;
      System.out.println(e);
}
轉(zhuǎn)換規(guī)則

范圍小的類型向范圍大的類型提升木蹬,byte走触、short惫皱、char運(yùn)算時(shí)直接提升為int涂滴。

byte、 short段多、 char-->int-->long--float-->double

1.2 強(qiáng)制轉(zhuǎn)換


1.5賦值到int類型變量會(huì)發(fā)生什么首量?產(chǎn)生編譯失敗,肯定無(wú)法賦值。

int i = 1.5; // 錯(cuò)誤

double類型內(nèi)存8個(gè)字節(jié)加缘,int類型內(nèi)存4個(gè)字節(jié)鸭叙。1.5double類型,取值范圍大于int拣宏∩虮矗可以理解為double是8 升的水壺,int是4升的水壺勋乾,不能把大水壺中的水直接放進(jìn)小水壺去宋下。
想要賦值成功,只有通過(guò)強(qiáng)制類型轉(zhuǎn)換辑莫,將double類型強(qiáng)制轉(zhuǎn)換成int類型才能賦值学歧。

  • 強(qiáng)制類型轉(zhuǎn)換:將取值范圍大的類型強(qiáng)制轉(zhuǎn)換成取值范圍小的類型

比較而言各吨,自動(dòng)轉(zhuǎn)換是Java自動(dòng)執(zhí)行的枝笨,而強(qiáng)制轉(zhuǎn)換需要我們自己手動(dòng)執(zhí)行。

轉(zhuǎn)換格式:

數(shù)據(jù)類型 變量名 = (數(shù)據(jù)類型)被轉(zhuǎn)數(shù)據(jù)值揭蜒;

1.5賦值到int類型横浑,代碼修改為:

// double類型數(shù)據(jù)強(qiáng)制轉(zhuǎn)成int類型,直接去掉小數(shù)點(diǎn)屉更。

int i = (int)1.5;

同樣道理徙融,當(dāng)一個(gè)short類型與1相加,我們知道會(huì)類型提升偶垮,但是還想給結(jié)果賦值給short類型變量张咳,就需要強(qiáng)制轉(zhuǎn)換。

public static void main(String[] args) {
//short類型變量似舵,內(nèi)存中2個(gè)字節(jié)
short s = 1;
/*
出現(xiàn)編譯失敗
s和1做運(yùn)算的時(shí)候,1是int類型葱峡,s會(huì)被提升為int類型
s+1后的結(jié)果是int類型砚哗,將結(jié)果在賦值會(huì)short類型時(shí)發(fā)生錯(cuò)誤
short內(nèi)存2個(gè)字節(jié),int類型4個(gè)字節(jié)
必須將int強(qiáng)制轉(zhuǎn)成short才能完成賦值
*/
s = s + 1砰奕; //編譯失敗
s = (short)(s+1);//編譯成功
}
轉(zhuǎn)換原理圖解
強(qiáng)烈注意
  • 浮點(diǎn)轉(zhuǎn)成整數(shù)蛛芥,直接取消小數(shù)點(diǎn),可能造成數(shù)據(jù)損失精度军援。

  • int強(qiáng)制轉(zhuǎn)成short砍掉2個(gè)字節(jié)仅淑,可能造成數(shù)據(jù)丟失。

//定義s為short范圍內(nèi)最大值
short s = 32767;
// 運(yùn)算后胸哥,強(qiáng)制轉(zhuǎn)換涯竟,砍掉2個(gè)字節(jié)后會(huì)出現(xiàn)不確定的結(jié)果
s = (short)(s + 10);

1.3 ASCII編碼表


public static void main(String[] args) {
      //字符類型變量
      char c = 'a';
      int i = 1;
      //字符類型和int類型計(jì)算
      System.out.println(c+i); //輸出結(jié)果是98
}

在計(jì)算機(jī)的內(nèi)部都是二進(jìn)制的0、1 數(shù)據(jù),如何讓計(jì)算機(jī)可以直接識(shí)別人類文字的問(wèn)題呢庐船?就產(chǎn)生出了編碼表的概念

  • 編碼表:就是將人類的文字和一個(gè)十進(jìn)制數(shù)進(jìn)行對(duì)應(yīng)起來(lái)組成一張表格银酬。

人們就規(guī)定:

字符 數(shù)值
0 48
9 57
A 65
Z 90
a 97
z 122
  • 將所有的英文字母,數(shù)字筐钟,符號(hào)都和十進(jìn)制進(jìn)行了對(duì)應(yīng)揩瞪,因此產(chǎn)生了世界上第一張編碼表ASCII (
    American Standard Code for Information Interchange 美國(guó)標(biāo)準(zhǔn)信息交換碼)。
  • 各個(gè)國(guó)家都有自己字符篓冲,所有都要有自己的編碼表李破,其中中國(guó)的編碼表GB2312,GBK,其中都是中國(guó)的漢字壹将,GBK編碼表前面的數(shù)字都是和ASCII表中的內(nèi)容相同喷屋,GBK編碼表中,英文使用的是一個(gè)字節(jié)表示瞭恰,中文使用的兩個(gè)字節(jié)
  • 各個(gè)國(guó)家都有自己的編碼表屯曹。出現(xiàn)了一個(gè)統(tǒng)一碼,Unicode惊畏,使用2個(gè)字節(jié)來(lái)表示一個(gè)字符恶耽,共能表示65536個(gè),可以表示世界上所有的字符颜启,java語(yǔ)言在內(nèi)存中表示字符偷俭,使用的就是Unicode編碼
  • UTF-8編碼形式,可變長(zhǎng)編碼缰盏,使用1個(gè)字節(jié)表示英文字母涌萤,3個(gè)字節(jié)表示一個(gè)漢字
  • 總結(jié):
    在內(nèi)存中一般使用Unicode編碼,在磁盤或者網(wǎng)絡(luò)中使用GBK或者UTF-8口猜,無(wú)論是GBK還是UTF-8還是Unicode統(tǒng)統(tǒng)都是兼容ASCII碼表负溪,在任意一個(gè)碼表中,對(duì)應(yīng)的英文字符济炎,都是相同的川抡。
  • java中表示字符使用的Unicode編碼,所以可以使用Unicode碼值去表示一個(gè)字符须尚,表示格式‘\uxxxx’
    \u代表的是Unicode中字符的一種形式崖堤,xxxx表示使用的4個(gè)16進(jìn)制的數(shù)字。
class DataTypeDemo {
    public static void main(String[] args) {
        //ASCII碼表
        //字符和數(shù)字的對(duì)應(yīng)關(guān)系
        //根據(jù)數(shù)字打印ASCII中的字符
        System.out.println((char)3);
        //根據(jù)字符獲取一下ASCII碼表中對(duì)應(yīng)的數(shù)字
        System.out.println((int)'a');
        System.out.println('a' + 0);
        //unicode碼值耐床,使用\u跟上四個(gè)十六進(jìn)制數(shù)的表示
        System.out.println('\u7788');
    }
}

小貼士:

在char類型和int類型計(jì)算的過(guò)程中密幔,char類型的字符先查詢編碼表,得到97,再和1求和撩轰,結(jié)果為98胯甩。char類型提升 為了int類型昧廷。char類型內(nèi)存2個(gè)字節(jié),int類型內(nèi)存4個(gè)字節(jié)蜡豹。

第二章 運(yùn)算符


運(yùn)算符時(shí)用于運(yùn)算和操作數(shù)據(jù)的符號(hào)麸粮。

2.1 算數(shù)運(yùn)算符


算數(shù)運(yùn)算符包括: -
+ 加法運(yùn)算,字符串連接運(yùn)算
- 減法運(yùn)算
* 乘法運(yùn)算
/ 除法運(yùn)算(求商)
% 取模運(yùn)算镜廉,兩個(gè)數(shù)字相除取余數(shù)
++ 弄诲、 -- 自增自減運(yùn)算

Java中,整數(shù)使用以上運(yùn)算符娇唯,無(wú)論怎么計(jì)算齐遵,也不會(huì)得到小數(shù)。

取余的結(jié)果的符號(hào)只能%前面的操作數(shù)有關(guān)
作用:判斷一個(gè)數(shù)能否被整數(shù)塔插,判斷奇偶

public static void main(String[] args) { 
      int i = 1234;
      System.out.println(i/1000*1000);//計(jì)算結(jié)果是  1000
}
  • ++運(yùn)算梗摇,變量自己增長(zhǎng)1。反之想许,--運(yùn)算伶授,變量自己減少1,用法與++一致。
    • 獨(dú)立運(yùn)算:

      • 變量在獨(dú)立運(yùn)算時(shí)流纹,前++和后++沒(méi)有區(qū)別糜烹。
      • 變量前++ :例如++i
      • 變量后++ :例如i++漱凝。
    • 混合運(yùn)算:

      • 和其他變量放在一起疮蹦,前++后++就產(chǎn)生了不同。

      • 變量前++ :變量a自己加1,將加1后的結(jié)果賦值給b,也就是說(shuō)a先計(jì)算茸炒。a和b的結(jié)果都是2愕乎。

      • 變量后++ :變量a先把自己的值1,賦值給變量b,此時(shí)變量b的值就是1,變量a自己再加1壁公。a的結(jié)果是2, b 的結(jié)果是1感论。

//變量前++
public static void main(String[] args) {
      int a = 1;
      int b = ++a;
      System.out. println( a); //計(jì)算結(jié)果是 2
      System.out. println (b); //計(jì)算結(jié)果是  2
}
//變量后++
public static void main(String[] args) {
      int a = 1;
      int b = a++;
      System.out. println( a); //計(jì)算結(jié)果是  2 System.out. pri ntln (b); //計(jì)算結(jié)果是  1
}
  • +符號(hào)在字符串中的操作:
    • +符號(hào)在遇到字符串的時(shí)彳唉,表示連接贮尖、拼接的含義笛粘。
    • "a"+"b"的結(jié)果是"ab",連接含義
public static void main(String[] args){
      System.out.println("5+5="+5+5);//輸出 5+5=55
}

2.2 賦值運(yùn)算符


分類:

  • 基本的賦值運(yùn)算符: =
  • 擴(kuò)展的運(yùn)算符: += 湿硝,-= ,*=润努,/= 关斜,%=
賦值運(yùn)算符包括: -
= 等于號(hào)
+= 加等于
-= 減等于
*= 乘等于
/= 除等于
%= 取模等
  • 基本賦值運(yùn)算符
    就是將符號(hào)右邊的值,賦給左邊的變量铺浇。
  • 擴(kuò)展的賦值運(yùn)算符
    將符號(hào)左右兩側(cè)的數(shù)據(jù)進(jìn)行算數(shù)運(yùn)算痢畜,將結(jié)果賦值給符號(hào)左邊的變量
public static void main(String[] args){ 
      int i = 5;
      i+=5;//計(jì)算方式i=i+5變量i先加5,再賦值變量i 
      System.out.println(i); //輸出結(jié)果是10
}

2.3 比較運(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
}

2.4 邏輯運(yùn)算符


分類:

  • 普通的邏輯運(yùn)算符 & 攻臀、 | 焕数、 ^!
  • 短路的邏輯運(yùn)算符 && 茵烈、 ||
邏輯運(yùn)算符包括: -
&&短路與 1. 兩邊都是true百匆,結(jié)果是true
2. —邊是false,結(jié)果是false
短路特點(diǎn):符號(hào)左邊是false呜投,右邊不再運(yùn)算
II短路或 1. 兩邊都是false加匈,結(jié)果是false
2. —邊是true,結(jié)果是true
短路特點(diǎn):符號(hào)左邊是true仑荐,右邊不再運(yùn)算
! 取反 1. ! true 結(jié)果是 false
2. ! false 結(jié)果是 true
^ 異或 相同為假雕拼,不同為真
  • 邏輯運(yùn)算符,是用來(lái)連接兩個(gè)布爾類型結(jié)果的運(yùn)算符粘招,運(yùn)算結(jié)果都是布爾值true或者false
class LogicalSignDemo{
    public static void main(String[] args) {
        //邏輯與
        System.out.println(true && true);//true
        System.out.println(true && false);//false
        System.out.println(false & true);//false
        System.out.println(false & false);//false
        System.out.println(12 & 10);//8  //進(jìn)行按位與運(yùn)算啥寇,相同為1不同為0
        //12      1100 
        //10      1010
        //  8     1000
    
        //邏輯或
        System.out.println(true || true);//true
        System.out.println(true | false);//true
        System.out.println(false | true);//true
        System.out.println(false | false);//false
        System.out.println(12 | 10);//12  //按位或操作,全0為0洒扎,否則為1
        //12      1100 
        //10      1010
        //14      1110

        //邏輯異或
        System.out.println(true ^ true);//false
        System.out.println(true ^ false);//true
        System.out.println(false ^ true);//true
        System.out.println(false ^ false);//false
        System.out.println(12 ^ 10 ^ 10);//異或一個(gè)數(shù)據(jù)兩次之后辑甜,返回的還是該數(shù)據(jù)本身
        //12      1100   //12和10異或的結(jié)果是6,6與再與10異或又回到了12本身
        //10      1010
        //6       0110
        //  10    1010
        //  12    1100

        //邏輯非
        System.out.println(!true);
        System.out.println(!false);

        //短路與和短路或
        //短路與和短路或是不能對(duì)數(shù)字進(jìn)行按位與操作
    //  短路與
        int a = 10;
        boolean boo1 = (a > 20) & (++a > 10);//普通的與即使第一個(gè)表達(dá)式為false,也會(huì)計(jì)算第二個(gè)表達(dá)式的結(jié)果
        System.out.println(a);//11

        int aa = 10;//短路與在進(jìn)行計(jì)算時(shí)袍冷,如果第一個(gè)表達(dá)式的結(jié)果為false磷醋,那么就不計(jì)算第二個(gè)表達(dá)式了
        boolean boo11 = (aa > 20) && (++aa > 10);
        System.out.println(aa);//10
        
    //  短路或
        int b = 10;
        boolean boo2 = (b > 9) | (++b > 10);//普通的或即使第一個(gè)表達(dá)式為true,也會(huì)計(jì)算第二個(gè)表達(dá)式的結(jié)果
        System.out.println(b);//11

        int bb = 10;
        boolean boo22 = (bb > 9) || (++bb > 10);//短路或在進(jìn)行計(jì)算時(shí)胡诗,如果第一個(gè)表達(dá)式的結(jié)果為true邓线,那么就不計(jì)算第二個(gè)表達(dá)式了
        System.out.println(bb);//10
    }
}

2.5 三元運(yùn)算符


  • 三元運(yùn)算符格式:

數(shù)據(jù)類型 變量名 = 布爾類型表達(dá)式 ? 結(jié)果1 : 結(jié)果2

  • 三元運(yùn)算符計(jì)算方式:
    • 布爾類型表達(dá)式結(jié)果是true淌友,三元運(yùn)算符整體結(jié)果為結(jié)果1,賦值給變量骇陈。
    • 布爾類型表達(dá)式結(jié)果是false震庭,三元運(yùn)算符整體結(jié)果為結(jié)果2,賦值給變量。
class TernaryOperatorDemo{
    public static void main(String[] args) {
        //三元運(yùn)算符
        System.out.println(9 == 9 ? 9 + 1 : "不相等");
            
        int i = 10;
        int j = 3;
        System.out.println(i < j ? i : j);
        //注意:
        int  m = 520;
        int n = 100;
    //  m > n ? "大于" : "小于";//三元表達(dá)式?jīng)]有變量進(jìn)行接收數(shù)據(jù)的時(shí)候你雌,是不能單獨(dú)存在的
        //"大于";
        //System.out.println(m > n ? "大于" : "小于");
        //如果表達(dá)式2和表達(dá)式3的數(shù)據(jù)類型不一致器联,那么不能定義一個(gè)變量去接受該三元表達(dá)式的結(jié)果
        //char c = m > n ? '大' : false ;  
        char c = m > n ? '大' : '小' ;  
        System.out.println(c);
        //比較三個(gè)數(shù)的最大值,返回的是三個(gè)數(shù)中最大值
        int x = 123;
        int y = 456;
        int z = 789;
        //先求出x和y的最大值
        int maxXy = x > y ?  x : y;
        //將maxXy和z進(jìn)行比較
        //int max = maxXy > z ? maxXy : z;
        int max = (x > y ?  x : y) > z ? (x > y ?  x : y) : z;
        System.out.println("最大值為" + max);
    }
}

第三章方法入門


3.1 概述


我們?cè)趯W(xué)習(xí)運(yùn)算符的時(shí)候匪蝙,都為每個(gè)運(yùn)算符單獨(dú)的創(chuàng)建一個(gè)新的類和main方法主籍,我們會(huì)發(fā)現(xiàn)這樣編寫代碼非常的繁瑣,而且 重復(fù)的代碼過(guò)多逛球。能否避免這些重復(fù)的代碼呢千元,就需要使用方法來(lái)實(shí)現(xiàn)。

  • 方法:就是將一個(gè)功能抽取出來(lái)颤绕,把代碼單獨(dú)定義在一個(gè)大括號(hào)內(nèi)幸海,形成一個(gè)單獨(dú)的功能。 當(dāng)我們需要這個(gè)功能的時(shí)候奥务,就可以去調(diào)用物独。這樣即實(shí)現(xiàn)了代碼的復(fù)用性,也解決了代碼冗余的現(xiàn)象氯葬。

3.2 方法的定義


  • 定義格式:
修飾符 返回值類型 方法名(參數(shù)列表){
        代碼 ...
        return ;
}
  • 定義格式解釋:

    • 修飾符:目前固定寫法public static挡篓。

    • 返回值類型:目前固定寫法void

    • 方法名:為我們定義的方法起名帚称,滿足標(biāo)識(shí)符的規(guī)范官研,用來(lái)調(diào)用方法。

    • 參數(shù)列表:目前無(wú)參數(shù)闯睹,帶有參數(shù)的方法在后面的課程講解戏羽。

    • return:方法結(jié)束。因?yàn)榉祷刂殿愋褪莢oid楼吃,方法大括號(hào)內(nèi)的return可以不寫始花。

  • 舉例:

public static void methodName() {
      System.out.println("這是一個(gè)方法");
}

3.3 方法的調(diào)用


方法在定義完畢后孩锡,方法不會(huì)自己運(yùn)行酷宵,必須被調(diào)用才能執(zhí)行,我們可以在主方法main中來(lái)調(diào)用我們自己定義好的方法躬窜。在主方法中忧吟,直接寫要調(diào)用的方法名字就可以調(diào)用了。

public static void main(String[] args) {
      //調(diào)用定義的方法method
      method()斩披;
}
      //定義方法溜族,被main方法調(diào)用
public static void method() {
      System.out.println("自己定義的方法,需要被main調(diào)用運(yùn)行");
}

3.4 調(diào)用練習(xí)


將三元運(yùn)算符代碼抽取到自定義的方法中垦沉,并調(diào)用煌抒。

public static void main(String[] args) {
      //調(diào)用定義的方法operator
      operator();
}

//定義方法,方法中定義三元運(yùn)算符
public static void operator() {
      int i = 0;
      i = (1==2 ? 100:200);
      System.out.println(i);
      int j = 0 ;
      j = (3<=4 ? 500:600);
      System.out.println(j);
}

3.5 注意事項(xiàng)


  • 方法定義注意事項(xiàng):

    • 方法必須定義在一類中方法夕卜

    • 方法不能定義在另一個(gè)方法的里面

public class Demo { 
public static void main(String[] args){ 

}
      //正確寫法厕倍,類中寡壮,main方法外面可以定義方法  
      public static void method(){}
}
public class Demo { 
public static void main(String[] args){ 
      //錯(cuò)誤寫法,一個(gè)方法不能定義在另一方法內(nèi)部 
      public static void method(){}
}
}

第四章JShell腳本工具


JShell腳本工具是JDK9的新特性

什么時(shí)候會(huì)用到JShell工具呢讹弯,當(dāng)我們編寫的代碼非常少的時(shí)候况既,而又不愿意編寫類,main方法组民,也不愿意去編譯和運(yùn)行,這個(gè)時(shí)候可以使用JShell工具棒仍。

啟動(dòng)JShell工具,在DOS命令行直接輸入JShell命令臭胜。

接下來(lái)可以編寫Java代碼莫其,無(wú)需寫類和方法,直接寫方法中的代碼即可耸三,同時(shí)無(wú)需編譯和運(yùn)行乱陡,直接回車即可

小貼士:
JShell工具,只適合片段代碼的測(cè)試仪壮,開(kāi)發(fā)更多內(nèi)容憨颠,建議編寫在方法中。

第五章擴(kuò)展知識(shí)點(diǎn)


5.1 +=符號(hào)的擴(kuò)展


下面的程序有問(wèn)題嗎积锅?

public static void main(String[] args){
      short s = 1;
      s+=1;
      System.out.println(s);
}

分析:s += 1邏輯上看作是s = s + 1計(jì)算結(jié)果被提升為int類型爽彤,再向short類型賦值時(shí)發(fā)生錯(cuò)誤,因?yàn)椴荒軐⑷≈捣秶蟮念愋唾x值到取值范圍小的類型乏沸。但是淫茵,s=s+1進(jìn)行兩次運(yùn)算+=是一個(gè)運(yùn)算符蹬跃,只運(yùn)算一次匙瘪,并帶有強(qiáng)制轉(zhuǎn)換的特點(diǎn),也就是說(shuō)s += 1就是s = (short)(s + 1),因此程序沒(méi)有問(wèn)題編譯通過(guò),運(yùn)行結(jié)果是2.

5.2 常量和變量的運(yùn)算


下面的程序有問(wèn)題嗎蝶缀?

public static void main(String[] args){  
      byte b1=1;
      byte b2=2;
      byte b3=1 + 2;
      byte b4=b1 + b2;
      System.out.println(b3);
      System.out.println(b4);
}

分析:b3 = 1 + 2丹喻,12是常量,為固定不變的數(shù)據(jù)翁都,在編譯的時(shí)候(編譯器javac)碍论,已經(jīng)確定了 1+2的結(jié)果并沒(méi)有超過(guò)byte類型的取值范圍,可以賦值給變量b3柄慰,因此b3 = 1 + 2是正確的鳍悠。

反之税娜,b4 = b2 + b3b2b3是變量藏研,變量的值是可能變化的敬矩,在編譯的時(shí)候,編譯器javac不確定b2+b3的結(jié)果是什 么蠢挡,因此會(huì)將結(jié)果以int類型進(jìn)行處理弧岳,所以int類型不能賦值給byte類型,因此編譯失敗业踏。

在jshell中體現(xiàn):

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末禽炬,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子勤家,更是在濱河造成了極大的恐慌腹尖,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件却紧,死亡現(xiàn)場(chǎng)離奇詭異桐臊,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)晓殊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門断凶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人巫俺,你說(shuō)我怎么就攤上這事认烁。” “怎么了介汹?”我有些...
    開(kāi)封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵却嗡,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我嘹承,道長(zhǎng)窗价,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任叹卷,我火速辦了婚禮撼港,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘骤竹。我一直安慰自己帝牡,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布蒙揣。 她就那樣靜靜地躺著靶溜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上罩息,一...
    開(kāi)封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天嗤详,我揣著相機(jī)與錄音,去河邊找鬼扣汪。 笑死断楷,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的崭别。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼恐锣,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼茅主!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起土榴,我...
    開(kāi)封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤诀姚,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后玷禽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體赫段,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年矢赁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了糯笙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡撩银,死狀恐怖给涕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情额获,我是刑警寧澤够庙,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站抄邀,受9級(jí)特大地震影響耘眨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜境肾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一剔难、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧准夷,春花似錦钥飞、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至楔绞,卻和暖如春结闸,著一層夾襖步出監(jiān)牢的瞬間唇兑,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工桦锄, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留扎附,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓结耀,卻偏偏與公主長(zhǎng)得像留夜,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子图甜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345