[英]Java object initialization - When is it necessary?
我對Java初始化感到好奇:
什么時候需要初始化這樣的對象:
String init = new String("");
哪些對象(如字符串)不必像上面那樣初始化?
String init = "";
根據您對問題的評論:
然后我的問題是哪些對象需要“ new Object()”初始化?
您是在問構造 ,而不是初始化。
所有對象都需要由某人構造。 由字符串文字創建的字符串由JVM構造。 基本上,您永遠都不想使用new String("text content here")
。
JVM還構造了其他幾個對象,例如您加載的每個類的Class
對象。 但是,除了String
,對於要與之交互的對象,通常要么必須顯式地構造它們(通過new
),要么從構造它們的方法中接收它們。 String
的情況比較特殊,因為它是在Java中的唯一對象類型(我認為 )用文字符號。 (所有其他文字,如42
或false
,都是原語。)
對於字符串,您幾乎總是想使用第二種形式。 在大多數情況下,即使結果相同,它所做的工作也較少。
同樣的建議適用於數字類,例如Integer
, Double
等。
在所有其他情況下,您通常沒有選擇權,而必須使用第一種形式。
在Java中,必須初始化所有對象。 第二種情況init = ""
也是一個初始化,除了編譯器使您避免顯式調用:對象創建仍然存在。 從Java 5開始,編譯器還“了解” Java原語的包裝器,使您可以在需要包裝器類的表達式中使用原語常量(這稱為autoboxing )。
所有局部變量必須顯式初始化,而成員字段可以隱式初始化為null
或原語的默認值。
所有對象都必須用new
初始化,但有些要初始化,例如:
String myString= "";
Integer myInteger= 2;
Float myFloat= 2f;
Double myDouble= 2d;
Byte myByte = 2;
以及每種類型的數組,都可以像`T [] array = {//列出一些Ts}那樣進行初始化;
String s1 = "1";
String s2 = new String("2");
int i1 = 1;
int i2 = new Integer(2);
long l1 = 1l;
long l2 = new Long(2l);
float f1 = 1f;
float f2 = new Float(2f);
double d1 = 1d;
double d2 = new Double(2d);
char c1 = '1';
char c2 = new Character('2');
byte b1 = 1;
byte b2 = new Byte((byte) 2);
int[] a1 = {1};
int[] a2 = new int[] {2};
大多數類都需要顯式構造(新的),但是一些類則不需要,它們是自動裝箱類(String,Integer,Double等),以及它們的數組(使用逗號分隔列表初始化)和這些是唯一的!
實際上,在編譯器級別發生的只是編譯器將隱式構造轉換為顯式構造(例如,使用new的構造)。
必須先初始化所有對象,然后才能使用它們。 您可以嘗試聲明:
int myPrimitiveInt;
Integer myObjectInt;
但是,除非給它一個值,否則無法使用myPrimitiveInt,並且myObjectInt隱式初始化為null。 對於要使用的任何一種(從對象中獲取null除外),無論是否使用構造函數,都需要為它們提供一個值。
myPrimitiveInt = 5;
myObjectInt = new Integer(5);
myObjectInt = 5;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.