自動類型轉換、強制類型轉換、作用域、整型表數範圍
一、變量的作用域
- 測試代碼:
public class Test1 { private static int value = 1; // 全局變量 private static int temp = 0; // 全局變量 public static void main(String[] args) { int value = 2; // 局域變量覆蓋全局變量 System.out.println(value); // 輸出的是局域變量,全局變量被屏蔽 System.out.println(temp); // 輸出的是全局變量,沒有在此方法內重新定義故而輸出全局變量的值 } }
- 結果截圖
二、基本數據類型
- 整型
通常所說的整型,實際指的是如下四種類型:
byte:一個byte型整數在內存裏占8位,表數範圍是:-128到127.
short:一個short型整數在內存裏占16位,表數範圍是:-32768到32767.
int:一個int型整數在內存裏占32位,表數範圍是:-2147483648到2147483647.
long:一個long型整數在內存裏占64位,表數範圍是:-9223372036854775808到9223372036854775807.
int是最常用的數據類型,因此通常情況下,一個java整數常量默認就是int類型。
除此之外,有如下兩種情形必須指出:
1.如果直接將一個較小的整數常量(在byte或short類型的表數範圍內)賦給一個byte或short變量,系統會自動把這個整數常量當成byte或者short類型來處理。
2.如果使用一個巨大的整數常量(超出了int類型的表數範圍)時,Java不會自動把這個整數常量當成long類型來處理。如果希望系統把一個整數常量當成long類型來處理,應在這個整數常量後增加l或者L作為後綴。通常推薦使用L,因為l很容易跟1搞混。
三、Java中的類型轉換
(註:鄙人認為虛線箭頭方向應該反向吧,覺得不是的請積極反駁哦!)
有兩種類型轉換:自動類型轉換和強制類型轉換
1.自動類型轉換
當把一個表數範圍小的數值或變量直接賦給另一個表數範圍大的變量時,系統將可以進行自動類型轉換,就如有兩瓶水,當把小瓶裏水倒入大瓶中時不會有任何問題。上圖中,實線箭頭左邊的數值型可以自動轉換為實線箭頭右邊的數值型。
不僅如此,當把任何基本類型的值和字符串值進行連接運算時,基本類型的值將自動轉換為字符串類型,即使字符串類型不再是基本類型,而是引用類型。因此,如果希望把基本類型的值轉換為對應的字符串,可以把基本類型的值和一個空字符串進行連接。
2.強制類型轉換
如果希望把箭頭右邊的類型轉換為左邊的類型,則必須使用強制類型轉換,強制類型轉換的格式是:(target Type)value,強制類型轉換的運算符是圓括號。當強制類型轉換時,類似於把大瓶子裏的水倒進小瓶子裏,如果大瓶子裏的水不多還好,但如果大瓶子裏的水很多,將會引起溢出,從而造成數據丟失。這種轉換也被稱為“縮小轉換(Narrow Conversion)”。
所以說自動類型轉換很安全,強制類型轉換要小心。
四、字符串連接基本類型
- 有如下代碼:
int x = 100;
int y = 200;
System.out.println("x+y="+x+y);
System.out.println(x+y+"=x+y");
-
結果:
-
原因:
“x+y=”+x+y 相當於 (“x+y=”+x)+y
先字符串與基本類型連接,轉化為對應的字符型後再與基本類型變量連接,最後輸出字符串。
x+y+“=x+y” 相當於 (x+y)+“=x+y”
先兩個基本類型做加法運算,之後得出的結果與字符串連接都轉換成字符串後輸出。
自動類型轉換、強制類型轉換、作用域、整型表數範圍