为什么类型为String的空变量声明为“null”而不是“”(空白或空)

时间:2013-06-09 20:23:31

标签: java

声明一个变量:

private String concatenation;

System.out.println(concatenation)显示:

null

这是一个长度为4的字符串,而不是null(布局类型,如null!null)值。如果我对它… = "null";进行审计,这是有道理的,但我没有。{/ p>

但如果声明为:

private String concatenation = "";

然后,System.out.println(concatenation)会显示:

` ` // No clue how to get a space to show up in SO so I am surrounding it with ticks

为什么Java不只是将其创建为具有空字符串的Object,为什么我必须将其定义为空。

4 个答案:

答案 0 :(得分:16)

不是"null",而是null。但println显示它是因为它被定义为这样做(见the Javadocs)。

至于为什么它没有初始化为空字符串,那是因为String是类类型,并且对类实例的引用的默认值始终是null

根本没有对象(即null)和处于“空”状态的对象之间存在很大差异。

答案 1 :(得分:1)

这是因为这是println系统工作的方式 - >当发送给它的对象为null(或者它没有当前引用的引用)时,它会输出null

你可以写一遍:

String concatenation = null;
System.out.println(concatenation ==null ? "" : concatenation )

这是向println函数发送一个空字符串而不是null。仅供参考:该函数实际上在大多数对象上调用toString来获取应该显示的内容,除非它自己的对象是一个字符串。

更多理论,试试:

System.out.println(concatenation == null);

看看会发生什么。 - (jlordo)

答案 2 :(得分:0)

如前所述,String是一个类,变量连接是一个引用变量,引用变量的默认值为null,这个输出告诉你,无论是什么引用变量,它都没有初始化,指向没有对象,所以空string!= null,这是两个不同的值,表示不同的东西。我想如果它在哪里自动创建一个空字符串,它就会创建不必要的对象..

答案 3 :(得分:-1)

String不是一个对象,它是一个类。如果您想要创建一个对象,它就像任何其他类一样需要它。举个例子,如果你做了:

int i;

你最终必须初始化并为i设置一个值。就像String一样。你不能让一个持有NULL的对象(在内存中没有分配特定的位置),这将告诉程序该对象内没有这样的内存。这就是你打印出来的原因。如果你做“”,它是空白的,但它也被初始化,因为对象在内存系统中有一个点放置“”,并最终搜索和访问。我在整个Java编程中都遇到过这方面的困难,但我最终了解到如果我将我的字符串,int(s)等初始化(稍后将值设置为对象以供内存引用)那么什么都不会导致问题