首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么字符串类型的空变量声明是"null“而不是"”(空白或空)

为什么字符串类型的空变量声明是"null“而不是"”(空白或空)
EN

Stack Overflow用户
提问于 2013-06-10 04:23:31
回答 4查看 4.9K关注 0票数 1

这样声明一个变量:

代码语言:javascript
复制
private String concatenation;

会让System.out.println(concatenation)展示以下内容:

代码语言:javascript
复制
null

它将是长度为4的字符串,而不是null(如null!null中的布尔型)值。如果我将它延迟到… = "null";,这将是有意义的,但我没有。

但是如果它被声明为:

代码语言:javascript
复制
private String concatenation = "";

然后,System.out.println(concatenation)将显示以下内容:

代码语言:javascript
复制
` ` // No clue how to get a space to show up in SO so I am surrounding it with ticks

为什么Java不直接将其创建为具有空字符串的对象,为什么我必须将其定义为空。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-06-10 04:24:32

不是"null",是null。但是println会这样显示它,因为它就是这样定义的(参见the Javadocs)。

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

完全没有对象(即null)和处于“空”状态的对象之间有很大的区别。

票数 16
EN

Stack Overflow用户

发布于 2013-06-10 04:30:45

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

你可以覆盖它:

代码语言:javascript
复制
String concatenation = null;
System.out.println(concatenation ==null ? "" : concatenation )

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

更多的理论,尝试:

代码语言:javascript
复制
System.out.println(concatenation == null);

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

票数 1
EN

Stack Overflow用户

发布于 2013-06-10 05:50:19

正如前面所说的,字符串是一个类,变量连接是一个引用变量,引用变量的默认值是null,看到这个输出告诉你,无论引用变量是什么,它都没有初始化,没有指向任何对象,所以一个空字符串!= null,这是两个不同的值,意味着不同的东西。我认为如果在哪里自动创建一个空字符串,它将创建不必要的对象。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17013823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档