0 基礎學 Java (三)變量

碼字不易,對你有幫助 點贊/轉發/關注 支持一下作者

微信搜公衆號:不會編程的程序圓

看更多幹貨,獲取第一時間更新

思維導體


目錄


正文


一、 變量

1. 變量的作用域

作用域:該變量能生效的範圍, 一般是變量定義所在的代碼塊 (大括號)。

1-1.java

public class helloWorld{
	
	public static void main(String[] args) {
		
		{
			int a = 10;//a 的作用域只在這個花括號內
		}
		
		System.out.println(a);//不能通過編譯
	}
}

1-2.java

public class helloWorld{
	
	public static void main(String[] args) {
		
		int a = 10;
		{
			System.out.println(a);//編譯可以通過,因爲 a 的作用域是整個 main 方法 
		}
		
		System.out.println(a);
	}
}

2. 變量的命名規則

同 C 語言一樣,Java 變量的命名規則:

  • 一個變量名只能包含數字, 字母, 下劃線

  • 數字不能開頭

  • 變量名是大小寫敏感的

注意: 雖然語法上也允許使用 /$命名變量, 但是 不推薦 這樣做。

建議:

  • 變量命名要具有描述性, 見名知意

  • 變量名不宜使用拼音(但是不絕對)

  • 變量命名推薦 小駝峯命名法, 當一個變量名由多個單詞構成的時候, 除了第一個單詞之外, 其他單詞首字母都大

二、 常量

常量不能在程序運行過程中發生修改 。

常量主要有以下兩種形式:

Ⅰ:字面值常量

10 // int 字面值常量(十進制)
010 // int 字面值常量(八進制) 由數字 0 開頭. 010 也就是十進制的 8
0x10 // int 字面值常量(十六進制) 由數字 0x 開頭. 0x10 也就是十進制的 16
10L // long 字面值常量. 也可以寫作 10l (小寫的L)
1.0 // double 字面值常量. 也可以寫作 1.0d 或者 1.0D
1.5e2 // double 字面值常量. 科學計數法表示. 相當於 1.5 * 10^2
1.0f // float 字面值常量, 也可以寫作 1.0F
true // boolen 字面值常量, 同樣的還有 false
'a' // char 字面值常量, 單引號中只能有一個字符
"abc" // String 字面值常量, 雙引號中可以有多個字符.

Ⅱ: final 關鍵字修飾的常量

用 final 修飾的變量建議使用 大寫 命名。

final int A = 10;
A = 20;//不能通過編譯

用 final 修飾的變量不能再被賦值。

final int A = 10;
a = 10;//即便不改變 a 的值,也不能通過編譯

如果一個用 final 修飾的變量沒有初始化,那麼這個變量是可以被賦值的(但是隻能賦值一次)。

final int A;
A = 10;//可以通過編譯
final int A;
A = 10;
A = 11;//不能通過編譯

進制問題

問題1:將十進制 122 轉換爲 二進制

方法1:用短除法求 2 進制

方法2:寫出權重直接看

問題2:將 2 進制轉化爲 8 進制 與 16進制

比如 122 的 二進制序列爲 0111 1010 (每四位寫在一起)

轉爲 8 進制的方法十分簡單,就是先將每三位寫在一起:

001 111 010 (如果二進制數不夠可以高位補 0)

將每三位二進制數寫成 十進制形式(其實並不算是10進制形式,可以這樣理解)

010 表示的是 2

111 表示的是 7

001 表示的是 1

172 就是轉換後的 八進制數

原理:八進制每一位可以寫 0 ~ 7 總共 8 種數,表示 8 種不同情況。3 個 二進制位可以寫 000 ~ 111 總共 2 * 2 * 2 = 8 種。

所以,3 個 二進制數 與 1 個 八進制是等價的。

同理:1 個 十六進制數 與 4 個 二進制數是等價的。也可以通過上述方式進行轉換。

三、 類型轉換

int 和 long/double 相互賦值

int a = 10;
long b = 20;
a = b; // 編譯出錯, 提示可能會損失精度.
b = a; // 編譯通過.

int a = 10;
double b = 1.0;
a = b; // 編譯出錯, 提示可能會損失精度.
b = a; // 編譯通過

long 表示的範圍更大, 可以將 int 賦值給 long, 但是不能將 long 賦值給 int.

double 表示的範圍更大, 可以將 int 賦值給 double, 但是不能將 double 賦值給 int.

結論: 不同數字類型的變量之間賦值, 表示範圍更小的類型能隱式轉換成範圍較大的類型, 反之則不行.

使用強制類型轉換:

int a = 10;
long l = 20;
double d = 1.0;
		
a = (int)l;//可以通過編譯
a = (int)d;//可以通過編譯

int 與 boolean 相互賦值

int a = 10;
boolean b = true;
b = a; // 編譯出錯, 提示不兼容的類型
a = b; // 編譯出錯, 提示不兼容的類型

甚至使用強轉都不行:

int a = 10;
boolean b = true;
a = (int)b;

結論: int 和 boolean 是毫不相干的兩種類型, 不能相互賦值.

int 字面值常量賦值給 byte 類型

byte a = 100; // 編譯通過
byte b = 256; // 編譯報錯, 提示 從int轉換到byte可能會有損失

注意: byte 表示的數據範圍是 -128 -> +127, 256 已經超過範圍, 而 100 還在範圍之內.

結論: 使用字面值常量賦值的時候, Java 會自動進行一些檢查校驗, 判定賦值是否合理.

總結:

  • 不同數字類型的變量之間賦值, 表示範圍更小的類型能隱式轉換成範圍較大的類型。
  • 如果需要把範圍大的類型賦值給範圍小的, 需要強制類型轉換, 但是可能精度丟失
  • 將一個字面值常量進行賦值的時候, Java 會自動針對數字範圍進行檢查。

四、數值提升

int 和 long 混合運算

int a = 10;
long b = 20;
int c = a + b; // 編譯出錯, 提示將 long 轉成 int 會丟失精度
long d = a + b; // 編譯通過.

結論: 當 int 和 long 混合運算的時候, int 會提升成 long, 得到的結果仍然是 long 類型, 需要使用 long 類型的變量來
接收結果. 如果非要用 int 來接收結果, 就需要使用強制類型轉換.

byte 和 byte 的運算

byte a = 10;
byte b = 20;
byte c = a + b;
System.out.println(c);
// 編譯報錯
//Test.java:5: 錯誤: 不兼容的類型: 從int轉換到byte可能會有損失
//byte c = a + b;
//           ^

結論: byte 和 byte 都是相同類型, 但是出現編譯報錯. 原因是, 雖然 a 和 b 都是 byte, 但是計算 a + b 會先將 a 和 b 都
提升成 int, 再進行計算, 得到的結果也是 int, 這是賦給 c, 就會出現上述錯誤。

由於計算機的 CPU 通常是按照 4 個字節爲單位從內存中讀寫數據. 爲了硬件上實現方便, 諸如 byte 和 short 這種低於
4 個字節的類型, 會先提升成 int, 再參與計算。

正確的寫法:

byte a = 10;
byte b = 20;
byte c = (byte)(a + b);
System.out.println(c);

總結:

  • 不同類型的數據混合運算, 範圍小的會提升成範圍大的.

  • 對於 short, byte 這種比 4 個字節小的類型, 會先提升成 4 個字節的 int , 再運算.

五、int 與 String 之間的轉換

int 轉換爲 string

int num = 10;
// 方法1
String str1 = num + "";
// 方法2
String str2 = String.valueOf(num);

String 轉換爲 int

String str = "100";
int num = Integer.parseInt(str);

[0 基礎學 java ] 系列的代碼可以在我的 Github 倉庫查看,地址如下:

https://github.com/hairrrrr/Java_SE_EnjoyLearning

歡迎 star !(點一個 star 方便你下回查看)

本系列的教學也可以在 GitHub 觀看(GitHub 上看教學的好處是所有文章的目錄比較清晰)。


以上就是本次的內容。

如果文章有錯誤歡迎指正和補充,感謝!

最後,如果你還有什麼問題或者想知道到的,可以在評論區告訴我呦,我可以在後面的文章加上你們的真知灼見。

關注我,看更多幹貨!

我是程序圓,我們下次再見。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章