JAVA? 常量
常量: ? ? (命名規(guī)范: 字母全部大寫,單詞之間用 "_"進行分隔 )
? ? ? ? ?(1)在程序執(zhí)行過程中陵珍,其值不發(fā)生改變的值;
? ? ? ? ?(2)在編譯時期就能確定其值伟姐;
分類:
1.? 字面值常量
2.? 自定義常量
字面值常量
1.? 字符串常量:? “hello”, “world”
2.? 整數(shù)常量:? 100, 200 ? ?默認(rèn)是 int類型,?
3.? 小數(shù)常量: ? ?1.2 ? ? ? ? ?默認(rèn)是double類型
4.? 字符常量:? ? ‘a(chǎn)’,? ‘b’
5.? 布爾常量:? ? true, false
6.? 空常量:? ? ? null
變量: ?內(nèi)存中分配的一塊空間懦鼠;
java中的8種基本數(shù)據(jù)類型:
(1) 整型 ? byte (1字節(jié)) ?short(2字節(jié)) ?int (4字節(jié)或者8字節(jié)) ? long(8字節(jié))
? ? ? ? ? ? ? 1字節(jié)為8bit扯键, 為內(nèi)存存儲的基本單位
? ? ? ? ? ? ? int為計算機運算的基本單位馅笙, ?32bit/64bit
數(shù)字常量默認(rèn)為 int類型爱只; 注意 long i =100000000000是會編譯報錯的,因為10000~默認(rèn)是int類型虱颗,但是已經(jīng)溢出了沥匈;
(2) 浮點型 ?float(4字節(jié)) ?double(8字節(jié))
(3) 字符類型 char ?(1字節(jié))
(4) 布爾型 ?boolean(1字節(jié)) ?僅含有 true蔗喂,false兩個值忘渔;
(5) 字符串類型 String ? ?不屬于基本數(shù)據(jù)類型,而是引用數(shù)據(jù)類型
變量聲明方式:
(1) ?數(shù)據(jù)類型 ? 變量名
(2) ?數(shù)據(jù)類型 ? 變量名1缰儿, 變量名2
變量必須先聲明再使用畦粮, 同一個作用域中不能聲明同名的變量
int ?age, height;
age = 10;
height = 170;
System.out.println( age );
System.out.println(height);
數(shù)據(jù)類型的轉(zhuǎn)換 ?(不同數(shù)據(jù)類型的賦值,以及數(shù)學(xué)運算)
(1) 小數(shù)據(jù)類型 ?--------> 大數(shù)據(jù)類型 ? ? 自動轉(zhuǎn)換
(2) 大數(shù)據(jù)類型 ?--------->小數(shù)據(jù)類型 ? ?需要強制類型轉(zhuǎn)換才能實現(xiàn)
/*
? ? ? ?小精度數(shù)據(jù) 轉(zhuǎn) ?大精度數(shù)據(jù) ?-->隱式轉(zhuǎn)換乖阵,自動轉(zhuǎn)換
*/
? ? ?byte b = 11;
? ? ?short s = b;
? ? ?int i = s;
? ? ?System.out.println("i:"+i);
/*
? ? ?大數(shù)據(jù)類型 --> 小數(shù)據(jù)類型 ?需要強制轉(zhuǎn)換宣赔,否則編譯器報錯
*/
/*
? ? 為什么b為 -128的原因?
? ? ? ? ? ? 這也是為什么大數(shù)據(jù)-->小數(shù)據(jù)類型 時瞪浸,編譯器報錯的原因儒将, 因為數(shù)據(jù)精度可能丟失,導(dǎo)致數(shù)據(jù)不正確对蒲, 如果程序的確有必要這樣轉(zhuǎn)钩蚊,請顯示聲明轉(zhuǎn)換贡翘;
? ? ? ? ? ? 另外:在計算機中,整數(shù)都是以補碼的形式存儲的砰逻;且最高位是符號位鸣驱,b是1字節(jié)數(shù)據(jù),但是此時b的數(shù)據(jù)為 100000000蝠咆,就表示為一個負數(shù)了踊东,且數(shù)字為128;
*/
int ?i = 128;
byte b = (byte)i;
System.out.println(b); ?//-128
/*
凡是byte刚操,short闸翅,char數(shù)據(jù)類型數(shù)據(jù)在運算的時候,都會自動轉(zhuǎn)成int類型的數(shù)據(jù)再進行運算菊霜;因為int的位數(shù)是計算機運算的基本單位缎脾;
? ? ? ? ? b1 + b 2 ,此時表達式的值 是 int類型的數(shù)據(jù), 而int->byte需要強制轉(zhuǎn)換
*/
? ? byte b1 = 1;
? ? byte b2 = 2;
? ? byte b3 = (byte)(b1+b2);
? ? System.out.println("b3:"+b3);
/*
兩個不同類型的數(shù)據(jù)在運算的時候占卧,結(jié)果的數(shù)據(jù)類型 取決于大的數(shù)據(jù)類型遗菠;
(int + long)---> (隱士轉(zhuǎn)換)long ---->需要強轉(zhuǎn)成 int
*/
? ?int ? i = 10;
? ?long l = i;
? ?i ?= (int)(i+1);
? ?System.out.println("i:"+i);
/*
(1) byte ?b = 10;
(2) int i = 10;
? ? ? b = i;
為什么前者不報錯,后者報錯华蜒?
? ? ?因為辙纬,10是常量,編譯器在編譯的時候就能夠確定常量的值了叭喜,此時編譯器能夠檢查到10并沒有超出byte的表示范圍贺拣,所以允許賦值;
? ? 而int i=10捂蕴, i的值不能在編譯時期確定其值譬涡,需要在運行時才能夠確定i的值,所以有可能精度丟失啥辨,而報錯涡匀;
*/