Java字符串的默认值:null vs"&引用;
Java字符串的默认值为“null”。但是,当我实例化字符串时,它似乎是一个空字符串。有人能解释一下吗Java字符串的默认值:null vs"&引用;,java,string,Java,String,Java字符串的默认值为“null”。但是,当我实例化字符串时,它似乎是一个空字符串。有人能解释一下吗 class Stuff { String a; String b = new String(); } class Demo { public static void main( String[] args ) { Stuff s = new Stuff(); System.out.println( s.a ); Sys
class Stuff
{
String a;
String b = new String();
}
class Demo
{
public static void main( String[] args )
{
Stuff s = new Stuff();
System.out.println( s.a );
System.out.println( s.b );
if( s.b.equals( "" ) )
{
System.out.println( "true" );
}
}
}
构造函数Javaodc说
初始化新创建的字符串
对象,使其表示空字符序列。请注意,由于字符串是不可变的,因此不需要使用此构造函数
与您观察到的行为相匹配。嗯,字符串
b
不再是null
,因为您创建了字符串并将其分配给变量
如果使用默认构造函数String
,则会得到一个空的String
:
公共字符串()
初始化新创建的字符串对象,使其表示
空字符序列。请注意,此构造函数的用法是
不需要,因为字符串是不可变的
在java中,默认字符串或设置为null的字符串没有值。通过使用“”或new string()
设置字符串,它将创建string类的新实例。用“”或new string()
启动的字符串只是一个可以使用的字符串。我想你可以把它想象成一个杯子。如果某个值为空,则您没有cup,但如果某个值(如此字符串)被初始化为new string()
或“”,则您现在有了一个空的cup。我猜string b=new string()
与string b=”“
相同。您也可以用许多其他方式实例化该字符串。@Ben:不太可能。它确实创建了一个新实例(分配给“
将不会)有趣,我也看到了,每天都在学习新的东西~除了下面的答案,null是一个语言概念,意思是“不引用对象”,所以当构造字符串或任何对象时,它不能选择null,即使它想这样。从逻辑上讲,它只能是一个空字符串。一个类的实例可以定义其他方式来表示它是空的或未定义的,但它不能说“嘿,我实际上是空的”。不在对象引用级别。我喜欢cup类比,尽管根据@Thilo对原始问题的回答,String b=”“
不一定创建String
对象的新实例,它可能引用intern池中的现有项。