Java未賦值變量的初始值(默認(rèn)值)
初始值(默認(rèn)值)
參考:官方文檔
Java程序中,任何變量必須初始化后才能使用。
以下為不同數(shù)據(jù)類型的默認(rèn)值。
數(shù)據(jù)類型 | 初始值 |
---|---|
byte | 0 |
short | 0 |
int | 0 |
long | 0L |
char | ‘u0000' |
float | 0.0f |
double | 0 |
boolean | false |
所有引用類型 | null |
但并不是所有未初始化的變量都會賦默認(rèn)值。
對應(yīng)的面試編程題:以下代碼會打印什么?
1
2
3
4
5
|
public static void main(String[] args) { int [] arr = new int [ 10 ]; System.out.println(arr[ 0 ]); } //打?。?0 |
1
2
3
4
5
|
public static void main(String[] args) { int a; System.out.println(a); } //編譯失敗,提示“Error:(16, 28) java: 可能尚未初始化變量a” |
下面根據(jù)不同的變量類型依次說明:
實例變量(非靜態(tài)字段)
系統(tǒng)會初始化默認(rèn)值
字段未被static修飾就是實例變量。在創(chuàng)建對象時,該變量會在分配內(nèi)存階段被賦予默認(rèn)值,在執(zhí)行new指令之后,被賦予程序定義的初始值。
1
2
3
4
|
public class Cat { // 實例變量 int age; } |
類變量(靜態(tài)字段)
系統(tǒng)會初始化默認(rèn)值
字段被static修飾就是類變量。在類加載的準(zhǔn)備階段,該變量會被賦予默認(rèn)值,在類加載的初始化階段,會被賦予程序定義的初始值。
1
2
3
4
|
public class Cat { // 類變量 static int age; } |
本地變量
系統(tǒng)不會初始化默認(rèn)值
方法塊中定義的變量為本地變量。該變量必須在代碼中顯示賦值,否則會提示編譯錯誤。
1
2
3
4
|
public static void main(String[] args) { // 本地變量 int a = 0 ; } |
參數(shù)
無需初始化默認(rèn)值
參數(shù)很好理解,如下所示,args就是參數(shù)。參數(shù)又分實參和形參。參數(shù)的值在調(diào)用該方法時傳入。
1
2
3
4
|
// args 就是參數(shù) public static void main(String[] args) { } |
解決java未賦值變量的默認(rèn)值問題
如下所示
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
package demo; import java.util.Arrays; public class demo { /*類字段變量可以不賦初值不報錯,其他變量一律要賦初值 * 不管程序有沒有顯示的初始化,Java 虛擬機(jī)都會先自動給它初始化為默認(rèn)值。 * 1、整數(shù)類型(byte、short、int、long)的基本類型變量的默認(rèn)值為0。 * 2、單精度浮點型(float)的基本類型變量的默認(rèn)值為0.0f。 * 3、雙精度浮點型(double)的基本類型變量的默認(rèn)值為0.0d。 * 4、字符型(char)的基本類型變量的默認(rèn)為 “/u0000”。 * 5、布爾性的基本類型變量的默認(rèn)值為 false。 * 6、引用類型的變量是默認(rèn)值為 null,如int[] a;。 */ public int i1; public static int i2; public int[] a=new int[5];//見main()方法中的int[] b=new int[5]; public static void main(String[] args) { /* 方法中的局部變量,ava 虛擬機(jī)不會自動的為它初始化為默認(rèn)值。 * 因此對于局部變量,必須先經(jīng)過顯示的初始化,才能使用它。 * 如果編譯器確認(rèn)一個局部變量在使用之前可能沒有被初始化,編譯器將報錯。 */ //int i3; int [] b= new int [ 5 ]; //數(shù)組變量實例化后,如果沒有顯式為每個元素賦值,Java 就會把該數(shù)組的所有元素初始化為其相應(yīng)類型的默認(rèn)值 System.out.println( new demo().i1); //輸出0 System.out.println(i2); //輸出0 //System.out.println(i3); //會報錯 System.out.println(Arrays.toString( new demo().a)); //此處為int型,默認(rèn)輸出{0,0,0,0,0}。 } } |
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持服務(wù)器之家。
原文鏈接:https://blog.csdn.net/joy_pan/article/details/102719280