是指沒有固定的值,可以改變的數。從計算機角度解釋就是,變數就是系統爲程式分配的一塊記憶體單元,用來儲存各種型別的數據。根據所儲存的數據型別的不同,有各種不同類型的變數。
按所屬的數據型別劃分:基本數據型別變數、參照數據型別變數; 按被宣告的位置劃分:區域性變數:方法或語句塊內部定義的變數;成員變數:方法外部、類的內部定義的變數
數據型別 | 關鍵字 | 佔用位元組 | 預設值 |
---|---|---|---|
布爾型 | boolean | 不定值 | false |
位元組型 | byte | 1 | 0 |
短整型 | short | 2 | 0 |
整型 | int | 4 | 0 |
長整型 | long | 8 | 0 |
字元型 | char | 2 | ‘\u0000’ |
單精度浮點型 | float | 4 | 0.0F |
雙精度浮點型 | double | 8 | 0.0D |
二進制數轉換成十進制數:
按權相加:把二進制數首先寫成加權係數展開式,然後按十進制加法規則求和。例:原碼1011.01=1x23+0x22+1x21+1x20 +0x2-1 +1x2-2 =8+0+2+1+0.25=11.25
十進制數轉換成二進制數:
整數部分:"除2取餘,逆序排列"法
小數部分:"乘2取整,順序排列"法
2 89
2 44 ... 1
2 22 ... 0
2 11 ... 0
2 5 ... 1
2 2 ... 1
2 1 ... 0
0 ... 1
則整數部分 89 轉換成二進制 1011001
0.625
x2
1.25
x2
0.5
x2
1.0
則小數部分 0.625 轉換成二進制 0.101
自動型別轉換:容量小的型別自動轉換成容量大的型別:byte,short,int它們三者在計算時會轉換成int型別,如果把int值轉換成float值,或者long轉換成double值,不需要強制轉換,但可能丟失精度。因爲,byte,char, short,int, long屬於精確值,精確值轉近似值float、double時,可能丟失精度。
【例子】
public class Test{
public static void main(String [ ] args ){
short s1=10;//short,int在計算時轉換成int型別
int s2=s1+1;//所以這個地方接收數據的型別需定義成int型,否則會報錯
System.out.println(s2);
}
}
強制型別轉換:容量大的型別轉換成容量小的型別時,需加上強制轉換符
long n=100L;
int i=(int) n;
有可能造成精度降低或者數據溢位,使用時要小心。boolean型別不能轉換成任何其他數據型別。
【例子】
public class Test{
public static void main(String [ ] args ){
short s1=10;//short,int在計算時轉換成int型別
s1=(short) s1+1;//所以這個地方s1需強制型別轉換成short型,或者按上面的吧接受數據型別定義成int型
System.out.println(s1);
}
}
符號 | 功能 |
---|---|
\n | 換行,將當前位置移到下一行開頭 |
\r | 回車,將當前位置移到本行開頭 |
\t | 水平製表,相當於一個Tab,即遊標跳到下一個Tab位置 |
代表一個反斜線字元"’ | |
代表一個單引號(撇號)字元 | |
代表一個雙引號字元 |
【例子】
import java.util.Scanner;//接受鍵盤輸入的工具類
//賦值運算子
public class Test{
public static void main(String [ ] args ){
short s1=10;//short,int在計算時轉換成int型別
//s1=s1+1;//所以這個地方接收數據的型別需定義成int型,否則會報錯
s1+=1;//寫成這種表達方式,就不會出現上面的型別問題
System.out.println(s2);
//建立一個鍵盤輸入的工具
Scanner input=new Scanner(System.in);
System.out.println("請輸入一個整數:");
int x1=input.nextInt();//從鍵盤接收一個整數
System.out.println(x1);
System.out.println("請輸入一個字串:");
String s= input.next();//從鍵盤接收一個字串
System.out.println(s);
}
}
邏輯運算子:用於對boolean型結果的表達式進行運算,運算結果總是boolean型,
運算子 | 描述 | 範例 | 結果 |
---|---|---|---|
& | 與 | false & true | false |
或 | false & true | true | |
^ | 互斥或 | true ^ false | true |
! | 非 | ! true | false |
&& | 短路與 | false && true | false |
短路或 | false true | true |
在計算機中,非0即真,0爲假
邏輯或:或1則1
邏輯與:全1則1
左移:"a << b; " 將二進制形式的a逐位左移b位,最低位空出的b位補0
帶符號右移:"a >> b; "將二進制形式的a逐位右移b位,最高位空出的b位補原來的符號位
無符號右移:"a >>> b; " 將二進制形式的a逐位右移b位,最高位空出的b位補0
【例子】
面試題:以最快的速度計算8*4結果?
使用位移的方法是最快的。
int result = 8 << 2;
左移演算法:位移數作爲2的次冪與運算元相乘
// 10 * 4
10 << 2=40
右移演算法:運算元除以位移數的2次冪
// 40/4
40 >> 2=10
//通過鍵盤輸入,初始化兩個數將這兩個數據交換位置後,輸出顯示交換後的數據
Scanner input =new Scanner(System.in);
System.out.println("請輸入第一個數");
int a =input.nextInt();
System.out.println("請輸入第二個數");
int b=input.nextInt();
int c=a;//通過第三個變數交換兩個數
a=b;
b=c;
a=a+b-(b=a);//或者通過表達式實現不用通過第三個變數交換兩個數
a=a^b;//或者通過互斥或實現兩個數交換位置最快的方法
b=a^b;
a=a^b;
System.out.println("a="+a+",b="+b);