[英]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.