Java成員變數預設值原理詳解
阿新 • • 發佈:2020-04-01
如果我們不做任何初始化工作,變數具有什麼預設值,或者是否具有預設值呢?
其實,成員變數在建立時,系統會為其分配一個預設值。不同型別的變數,預設值也不相同,下面來看看各種型別的預設值分別是什麼。
用例子來說明:先輸入一個java程式碼(這裡只包括了例項變數)
class Text1 { // 例項成員變數 private boolean bool; private byte b; private short s; private char c; private int i; private long l; private float f; private double d; private String str; private String[] strArray; public void printInstance() { System.out.println("例項成員變數預設值:"); System.out.println("boolean:" + bool); System.out.println("byte:" + b); System.out.println("short:" + s); System.out.println("int:" + i); System.out.println("long:" + l); System.out.println("float:" + f); System.out.println("double:" + d); System.out.println("String:" + str); System.out.println("String[]:" + strArray); System.out.println("char:" + c); } } public class Text{ public static void main(String[] args) { Text1 dv = new Text1(); dv.printInstance(); } }
輸出結果:
下面我們來看看類變數是否和例項變數一樣
class Text1 { // 靜態成員變數 private static boolean boolStatic; private static byte bStatic; private static short sStatic; private static char cStatic; private static int iStatic; private static long lStatic; private static float fStatic; private static double dStatic; private static String strStatic; private static String[] strArrayStatic; public static void printStatic() { System.out.println("靜態成員變數預設值:"); System.out.println("boolean:" + boolStatic); System.out.println("byte:" + bStatic); System.out.println("short:" + sStatic); System.out.println("int:" + iStatic); System.out.println("long:" + lStatic); System.out.println("float:" + fStatic); System.out.println("double:" + dStatic); System.out.println("String:" + strStatic); System.out.println("String[]:" + strArrayStatic); System.out.println("char:" + cStatic); } } public class Text{ public static void main(String[] args) { Text1 dv = new Text1(); dv.printStatic(); } }
輸出結果:
在本程式中聲明瞭各種型別,分別為8種基本資料型別、引用型別、陣列型別。並且宣告為兩組,一組為例項變數,一組為靜態變數。然後一次輸出兩組資料的值。
陣列型別與引用型別的預設值相同,都為null,實際上,陣列就是一種特殊的類(物件),所以陣列型別的變數也就是引用型別的變數。從結果可知,相同型別的例項變數與靜態變數預設值是相同的。
這裡有一點奇怪,char型別變數後面什麼也沒有輸出。不過,這並不是char型別變數沒有預設值,而是預設值為“空字元”,也就是‘\u0000',數值為0,我們可以證明一下。
class Text1 { char c; } public class Text{ public static void main(String[] args) { Text1 A = new Text1(); System.out.println((int) A.c); System.out.println(A.c == '\u0000'); } }
輸出結果:
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。