打印 ‘a’+1,輸出98,解釋:’a’是char類型占2個8bit,1是int類型占4個,’a’字符會被自動強制轉換為int類型對應ascii碼表97
打印’1’+1,輸出 50,解釋:’1’是char類型,會被自動類型提升為int類型,對應ascii表49
定義byte b=3
b=b+2
此時會編譯報錯,可能損失精度,byte b在內存中默認是占一個8bit,int 2在內存中默認是占4個8bit,不同類型不能計算,必須自動類型提升轉換,小的往大的提升,byte b會往int類型提升,此時可以計算,計算結果是4個8bit,結果從新賦值給byte b的時候,會損失精度
強制類型轉換
上面的代碼修改成 b=(byte)(b+2),此時就不會報錯了,int類型強制轉換為byte
public class VariableDemo { /** * @param args */ public static void main(String[] args) { System.out.println('a' + 1);// 輸出 98 System.out.println('1' + 1);// 輸出 50 } }
PHP版:
PHP中是弱類型語言,打印 ‘1’+1會輸出 2,String類型’1’被自動轉成了int類型
強轉只有這些 (int) (bool) (float) (string) (array) (object)
<?php class VariableDemo{ public static function main(){ var_dump('a'+1);//輸出 int(1) var_dump((int)'1');//輸出 int(1) var_dump((bool)'1');//輸出 bool(true) var_dump((array)'1');//輸出 array(1) { [0]=> string(1) "1" } var_dump((object)'1');//輸出 object(stdClass)#1 (1) { ["scalar"]=> string(1) "1" } } } VariableDemo::main();