常量與變量
什麼是常量和變量
常量與變量都是程式在運作時用來存儲資料一塊記憶體空間
常量:
常量的值在程式運作時不能被改變,Java中聲明常量必須使用final關鍵字。常量還可以分為兩種意思:
第1種意思,就是一個值,這個值本身,我們可以叫它常量,舉幾個例子:
整型常量: 123
實型常量:3.14
字元常量: 'a'
邏輯常量:true、false
字元串常量:"helloworld"
這隻是說法的問題,比如7這個數,我們就可以說“一個int類型的常量7 ”
第2種意思,表示不可變的變量,這種也叫常量,從文法上來講也就是,加上final,使用final關鍵字來修飾某個變量,然後隻要指派之後,就不能改變了,就不能再次被指派了
//聲明一個int類型的常量i
final int i = 1;
//聲明一個String對象類型的常量s,"Hello"字元串也是一個常量
final String s = "Hello";
需要注意的是:常量在聲明時必須要給這個常量賦一個值。
變量:
是程式運作時用來存儲資料的一塊記憶體空間,是程式中最基本的存儲單元,我們可以使用變量名通路變量。
Java變量的分類:
按聲明位置分:
局部變量
成員變量
方法的參數是局部變量。
public class Test{
int i1 = 1; //成員變量
public class static main(String[] args){ //args是方法的參數,是以也是局部變量
int i2 = 2; //局部變量
}
}
按資料類型分:
基本資料類型變量
引用資料類型變量
public class Test{
int i = 1; //基本資料類型變量
String s = new String(); //引用資料類型
}
使用變量的步驟:
第一步:聲明一個變量——根據類型在記憶體中開辟空間 第二步:指派——将資料存入空間 第三步:使用變量——得到記憶體中的資料使用
我們使用變量前必須要先聲明和指派,聲明和指派可以分開,也可以結合為一步;
成員變量在聲明時如果沒有為其顯式指派,則會為其配置設定一個預設值。
public class Test{
int i3; //如果是成員變量,系統會為其預設配置設定一個值0
public static void main(String[] args){
int i1; //聲明
i1 = 1; //指派
int i2 = 2; //聲明的同時為其指派,2這個值也叫“直接量”
System.out.println(i1); //使用,将變量的值輸出到Java控制台
}
}
基本資料類型
Java是一種強類型語言,所謂強類型,就是每個變量表達式在編譯時就必須要有一個确定的資料類型。Java資料類型分為兩大類:基本類型和引用類型。
引用資料類型為:類、接口、數組。
Java中的基本資料類型分為四類八種,分别為:
基本資料類型 | |||||
數值型 | 字元類型char 占用空間:2位元組 | 布爾類型boolean 占用空間:1位 | |||
整數類型 | 浮點類型 | ||||
位元組byte | 短整型short | 整型int | 長整型long | 單精度型long | 雙精度型double |
1位元組 | 2位元組 | 4位元組 | 8位元組 | 4位元組 | 8位元組 |
-128~127 | -32768~32767 | -2147483648 ~2147483647 | -9223372036854774808 ~9223372036854774807 | -3.403E38 ~3.403E38 | -1.798E308 ~1.798E308 |
整數類型
- Java整形常量預設為int類型,聲明long類型常量需要在後面加上L
- Java語言整形常量的3種表現形式
- 十進制整數:如12,-15,0
- 八進制整數:要求以0開頭,如012
- 十六進制數:要求以0x或0X開頭,如0x12
- 注:因為Java中可以使用十六進制方式指派,是以類似于十進制10與十六進制A在記憶體中沒有差別。
- Java7之後Java中也可以使用二進制的方式為整形指派。
byte b1 = 127; //正确
byte b2 = 128; //錯誤,超出範圍
short = b1; //正确,将另外一個變量的值賦給該變量,并且沒有超出範圍
int i1 = 12;//正确
int i2 = 012; //正确
int i3 = 0x12; //正确
System.out.println(i2); //輸出10,因為i2是以8進制方式指派的
System.out.println(i3); //輸出18,因為i3是以16進制方式指派的
long lo = 2147483648L; //long類型聲明需要加上L
浮點類型
- Java浮點類型常量有兩種表現形式:
- 十進制數形式:例如3.14 314.0 .314
- 科學計數法形式:如3.14e2 3.14E2 3.14E-2
- Java浮點類型常量預設double,如果要聲明一個常量為float則需要在後面加F
- 因為精度問題,是以不要用浮點類型做等于比較
float f1 = 123;
float f2 = 123.4F;
double d1 = 1234.5;
double d = 3.141_592_65_36 //正确,java7後為了使比較長的資料較有可讀性,可以在數字之間使用下劃線
字元類型
- 字元類型是單引号括起來的單個字元
- Java字元采用Unicode編碼,每個字元占兩個位元組,因而可以用十六進制編碼形式表示,如 char c = '\u0061';
- 允許使用轉義字元'\'将其後字元轉為其他含義,如 char c = '\n';換行
- Java 中常用的轉義字元
[Java入門筆記] Java語言基礎(二):常量、變量與資料類型常量與變量基本資料類型
char c1 = '你'; //正确
char c2 = '你好'; //錯誤
char c3 = '\u9999'; //正确
System.out.println(c3); //輸出'香'
布爾類型
用來存儲"真","假"的類型,隻有true和false兩種值。
boolean b = true;
資料類型的轉換
- 精度排序:(由低到高)
- Byte < short < int < long < float < double
- 由低到高轉換時系統會自動轉換;高精度轉換為低精度時,會有精度損失,須強制轉換;運算時,不同類型會自動轉換為高精度類型。
-
byte b = 127; short s = b; //會自動轉換為short b = (byte)s; //不會自動轉換,需要強制轉換
-
- double常量轉換為float常量産生溢出時不能轉換
-
public class Test { public static void main(String[] args) throws Exception { double d = 12222222222222222222222222222222222222222222222222222.3; float f = (float) d; //d的值已經超出了float的範圍,是以轉換會“溢出”,但是編譯不會報錯 System.out.println(f); //因為産生了溢出,是以輸出“Infinity” } }
-
- 系統在運算時會将數值自動轉換為int型,将運算結果賦給原來的類型時需要進行強制轉換。
-
byte b1 = 1; byte b2 = (byte) (b1 + 2); //數值運算時會自動轉換為int,是以計算出結果後将值再賦給byte類型變量b2時需要強制轉換
-
- 如果常量值超出了預設類型時,必須在後面加大于該預設類型的數值類型開頭字母,如 long num=30000000000L; 因為整型類型預設為int,但30000000000在int中放不下,是以要在後面加小寫l或大寫L,轉換為long型。
- (資料類型名)要轉換的變量或值 與 要轉換的變量或值+轉換符 這兩種轉換方式有本質上的差別,前一種表示它在計算機中是他原來的類型,再把它強制轉換成現在的類型,後一種表示它一開始在計算機裡就已經是轉換完成了的這種類型。
-
long lo = (long)2; long lo2 = 2L; //這兩種聲明或轉換有本質差別
-
轉載于:https://www.cnblogs.com/hopeblog/p/5005870.html