Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java字符串的默认值:null vs"&引用;_Java_String - Fatal编程技术网

Java字符串的默认值:null vs"&引用;

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

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 );
       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池中的现有项。