java 定义变量时 赋值与不赋值_探究Java中基本类型和部分包装类在声明变量时不赋值的情况下java给他们的默认赋值...
探究Java中基本類型和部分包裝類在聲明變量時不賦值的情況下java給他們的默認賦值
當基本數據類型作為普通變量(八大基本類型: byte,char,boolean,short,int,long,float,double)
只有開發人員對其進行初始化,java不會對其進行初始化,
如果不初始化基本類型變量,則編譯時就會報錯
實驗的部分包裝類如 Byte,Char,Boolean,Short,Integer,Long,Float,Double 等類的約束和基本類型如出一轍
當基本數據類型作為類成員變量時,java會自動給這些變量初始值賦值
class ElementTypes {
// 作為類成員變量聲明
byte defaultBasicByte;
char defaultBasicChar;
boolean defaultBasicBoolean;
short defalutBasicShort;
int defaultBasicInt;
long defaultBasicLong;
float defaultBasicFloaat;
double defaultBasicDouble;
Byte defaultByte;
Char defaultChar;
Boolean defaultBoolean;
Short defalutShort;
Integer defaultInt;
Long defaultLong;
Float defaultFloaat;
Double defaultDouble;
}
public class Exploration {
/**
* 輸出基本數據類型及部分包裝類成員變量被java賦予的默認值
*/
public static void ExploreClassFieldsDefaultValue() {
ElementTypes elementTypes = new ElementTypes();
// 調試輸出
logger.debug(byte.class + " DefaultValue " + elementTypes.defaultBasicByte);
logger.debug(char.class + " DefaultValue " + elementTypes.defaultBasicChar);// Console
// 輸出為空方格
logger.debug(boolean.class + " DefaultValue " + elementTypes.defaultBasicBoolean);
logger.debug(short.class + " DefaultValue " + elementTypes.defalutBasicShort);
logger.debug(int.class + " DefaultValue " + elementTypes.defaultBasicInt);
logger.debug(long.class + " DefaultValue " + elementTypes.defaultBasicLong);
logger.debug(float.class + " DefaultValue " + elementTypes.defaultBasicFloaat);
logger.debug(double.class + " DefaultValue " + elementTypes.defaultBasicDouble);
logger.debug(byte.class + " DefaultValue " + elementTypes.defaultByte);
logger.debug(char.class + " DefaultValue " + elementTypes.defaultChar);
logger.debug(boolean.class + " DefaultValue " + elementTypes.defaultBoolean);
logger.debug(short.class + " DefaultValue " + elementTypes.defalutShort);
logger.debug(int.class + " DefaultValue " + elementTypes.defaultInt);
logger.debug(long.class + " DefaultValue " + elementTypes.defaultLong);
logger.debug(float.class + " DefaultValue " + elementTypes.defaultFloaat);
logger.debug(double.class + " DefaultValue " + elementTypes.defaultDouble);
}
@Test // 如果不用 JUnit 測試也可以選擇直接 main函數
public void test() throws Exception {
ExploreClassFieldsDefaultValue();
}
}
以上將基本數據類型和部分包裝類聲明為該類型的類屬性變量,在不聲明初始值的前提下然后在類的靜態方法中輸出其指向的變量空間中的值
控制臺輸出,即可知道 java 在構造類的時候默認給這些類型變量的默認值
2020-11-21 21:34:35.773 [main] DEBUG localCollection.Exploration - byte DefaultValue 0
2020-11-21 21:34:35.773 [main] DEBUG localCollection.Exploration - char DefaultValue
2020-11-21 21:34:35.774 [main] DEBUG localCollection.Exploration - boolean DefaultValue false
2020-11-21 21:34:35.774 [main] DEBUG localCollection.Exploration - short DefaultValue 0
2020-11-21 21:34:35.774 [main] DEBUG localCollection.Exploration - int DefaultValue 0
2020-11-21 21:34:35.774 [main] DEBUG localCollection.Exploration - long DefaultValue 0
2020-11-21 21:34:35.774 [main] DEBUG localCollection.Exploration - float DefaultValue 0.0
2020-11-21 21:34:35.774 [main] DEBUG localCollection.Exploration - double DefaultValue 0.0
2020-11-22 08:25:26.304 [main] DEBUG localCollection.Exploration - class java.lang.Byte DefaultValue null
2020-11-22 08:25:26.304 [main] DEBUG localCollection.Exploration - class java.lang.Character DefaultValue null
2020-11-22 08:25:26.304 [main] DEBUG localCollection.Exploration - class java.lang.Boolean DefaultValue null
2020-11-22 08:25:26.304 [main] DEBUG localCollection.Exploration - class java.lang.Short DefaultValue null
2020-11-22 08:25:26.304 [main] DEBUG localCollection.Exploration - class java.lang.Integer DefaultValue null
2020-11-22 08:25:26.304 [main] DEBUG localCollection.Exploration - class java.lang.Long DefaultValue null
2020-11-22 08:25:26.304 [main] DEBUG localCollection.Exploration - class java.lang.Float DefaultValue null
2020-11-22 08:25:26.304 [main] DEBUG localCollection.Exploration - class java.lang.Double DefaultValue null
2020-11-22 08:25:26.304 [main] DEBUG localCollection.Exploration - class java.lang.String DefaultValue null
以上第二行 char 類型對應的默認值 在控制臺是輸出了一個“空白方格”???
首先搞清楚 char 類型在 java 中是 16位的,使用的是 Unicode 編碼方式,其中 Unicode 編碼前 0~127 是 8 位的 ASCII 值,而 ASCII 值中又分為 控制字符和可顯示字符
使用java 方法進行嘗試輸出
public static void examineCharWithASCII() {
char a = 0x00;// 十六進制數 0x00對應的ASCII碼是控制字符空字符(Null)
char c = 0x20;// 十六進制數 0x00對應的ASCII碼是控制字符EM連接介質中斷
char b = 0x19;// 十六進制數 0x00對應的ASCII碼是可顯示字符(空格)(sp)
char d = 0x21;// 十六進制數 0x00 對應的ASCII碼是可顯示字符'!'
char u0 = '\u0000';// 使用 Unicode 編碼方式進行初始化
logger.debug("\u0000 to " + char.class + u0);
logger.debug("0x00 to " + char.class + a);
logger.debug("0x19 to " + char.class + b);
logger.debug("0x20 to " + char.class + c);
logger.debug("0x21 to " + char.class + d);
}
輸出結果
輸出結果的內容復制效果(實際上是要分行復制的,null(什么都沒有)真的很影響整段復制粘貼)
2020-11-22 08:28:28.780 [main] DEBUG localCollection.Exploration - to char
2020-11-22 07:49:37.715 [main] DEBUG localCollection.Exploration - 0x00 to char
2020-11-22 07:49:37.715 [main] DEBUG localCollection.Exploration - 0x19 to char
2020-11-22 07:49:37.715 [main] DEBUG localCollection.Exploration - 0x20 to char
2020-11-22 07:49:37.715 [main] DEBUG localCollection.Exploration - 0x21 to char!
'\u0000' 在 unicode 中就是 NUL 控制字符
0x00 和 0x19 這兩個十六進制數對應的控制字符不可顯示(實際上就是不能正常顯示),在控制臺就會顯示方格(除了null控制字符是真的什么都沒有,其他的控制字符輸出的方格復制進純文本編輯器還是可以看到對應的<0x19>),其它啊控制字符類似效果
0x20 和 0x21 分別是空白可顯示字符和'!'可顯示字符,所以一個打印的是空白(可被選中的空格)和感嘆號,其他可顯示字符與其效果類似
文檔當前版本 v1.0
版本號
修改內容
備注
時間
1.0
生成初始內容
新建文檔
1.1
添加調試截圖
暫無
2020年12月4日 14點24分
總結
以上是生活随笔為你收集整理的java 定义变量时 赋值与不赋值_探究Java中基本类型和部分包装类在声明变量时不赋值的情况下java给他们的默认赋值...的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: java main 如何不退出_为什么j
 - 下一篇: Win10更新AMD显卡驱动(win10