在我的整个职业生涯中,我经常看到这样的电话:
if( "".equals(foo) ) { //do stuff };
如何根据Java较低级别的数据理解空字符串?
具体来说,通过“低级Java”,我指的是内存的实际内容或用于表示""
序列的一些C / C ++构造,而不是Java中的高级实现。
我之前检查了Java语言规范,它引导我this,并注意到“空字符串”并没有给出更多的定义,这就是导致头部划伤的原因。
然后我在一些不同的类上运行javap
试图通过字节码来解释答案,但是关于“机器如何处理序列""
的行为已经不再存在了然后排除了字节代码和Java代码,然后我在这里发布了这个问题,希望有人能从较低层次的角度阐明这个问题。
答案 0 :(得分:6)
没有“空字符串”这样的东西。字符始终是UTF-16代码单元,并且没有“空”代码单元。有一个“空字符串”,其表示方式与任何其他字符串完全相同:
char[]
参考char[]
在这种情况下,长度为0. char[]
引用可能可能是对空char数组的引用,可能可能共享在String
的所有实例之间,其长度为0。
(substring
等代码可以通过检测0长度请求并始终将相同的引用返回到空字符串来实现,但我不知道这样做的实现。 )