String str1;
String str2 = null;
String str3 = "";
String str4 = new String();
String str5 = new String("");
我知道对于上面的第3个初始化,字符串对象在字符串池中初始化,而第4个与字符串池无关。
1.和2有 什么区别?如果我将其str1
视为指针变量,它存储的是特定内存地址,而该内存地址从未被JVM或OS使用?
4.和5 之间有区别吗?
当我打印str1
和str2
通过直接System.out.println(str1)
和System.out.println(str2)
,对str1
,我甚至无法通过compilation.For
str2
,编译OK,我得到“空”,并在控制台窗口中的输出。为什么?
@aioobe的答案后编辑:更多问题:
我想了解更多有关“
null”的信息。由于str2
(参考变量)就像一个指针变量,因此其中(在该指针变量所占用的内存中)应该有一些内容(0/1位)。由于将其初始化为null,是全0位还是null的字节码全为零?另一个问题是,如果我调用toString()方法上str2
的str2.toString()
,我得到了在运行时一个空指针错误。因此,由JVM检查引用变量是否为null?JVM如何知道它为null?JVM检查中的位str2
?
关于Java中 null的 另一个问题:
null和字符串文字的串联
1.和2.有什么区别?如果我将其
str1
视为指针变量,它存储的是特定内存地址,而该内存地址从未被JVM或OS使用?
如果这些是 类 中的 字段 ,则没有区别,因为引用类型的字段(例如String)的默认值已经是null
。
如果这些是 局部变量
(即在方法中声明的变量)str1
将不会初始化为任何内容,而str2
将初始化为null
。此处的区别在于,局部变量在初始化之前无法使用,因此(如您所发现的)您不能打印str1
,但可以打印str2
。
4.和5.之间有区别吗?
不,不是语义上的。但是,您将获得略有不同的字节码。
当我直接通过System.out.println(str1)和System.out.println(str2)打印str1和str2时,对于str1,我什至无法通过编译。对于str2,编译正常,并且在控制台窗口中得到“
null”和输出。为什么?
这似乎表明这些是局部变量。使用局部变量之前,需要对其进行初始化。
我想了解更多有关“
null”的信息。由于str2
(参考变量)就像一个指针变量,因此其中(在该指针变量所占用的内存中)应该有一些内容(0/1位)。当它初始化为时null
,它是全0位还是null
全零?另一个问题是,如果我调用该方法
toString()
上str2
的str2.toString()
,我得到了在运行时一个空指针错误。因此,由JVM检查引用变量是否为null
?
是。
JVM如何知道它是
null
?JVM检查中的位str2
?
是。
在我的应用程序中,一切正常,但我想提高性能并优化我的代码。 这两个哪个更适合 1.initialisation 2.连接
问题内容: 显然,javac中初始化字符串的大小受到限制。谁能帮助我确定最大限额? 谢谢 编辑: 我们正在构建一个初始化字符串,看起来像这样的“ {1,2,3,4,5,6,7,8 ......}”,但理想情况下应包含10,000个数字。当我们为1000执行此操作时,10,000会引发错误,提示代码对于try语句而言太大。 为了产生这种效果,我们使用了一个stringbuilder并在附加值的数组上
问题内容: 如果String和其他字符串一样是一个类,如何使用双引号将其初始化? 问题答案: Java的设计者决定保留面向对象语言中的原始类型,而不是将所有内容都变成对象,以提高语言的性能。原语存储在调用堆栈中,这需要较少的存储空间,并且操作成本较低。另一方面,对象存储在程序堆中,这需要复杂的内存管理和更多的存储空间。 出于性能原因,Java的String设计为介于基本体和类之间。 例如 注意:
同一类型的扫描仪方法在一个地方工作,但在另一个地方不工作。。。如果这改变了任何答案,我将使用eclipse作为我的代码编辑器。如果不是在这里,所有变量都已在别处声明。 如果有人知道如何解决这个问题,我将永远感激你:) 这一个正在工作: 这个不起作用: 错误消息:
问题内容: 考虑一个名为的Java字符串字段。为类x创建对象时的初始值是多少? 我知道对于变量,在创建实例时将默认值分配为。但是会变成什么呢? 问题答案: 如果不执行任何操作,则将其初始化为null,所有引用类型也将初始化为null。
问题内容: Go Newbie问题:我正在尝试使用默认值初始化以下结构。我知道,如果“ Uri”是字符串而不是指向字符串(* string)的指针,则可以使用。但是我需要这个指针来比较结构的两个实例,如果未设置Uri,则Uri将为nil,例如,当我从json文件解组内容时。但是,如何正确地将这样的结构初始化为“静态默认值”呢? 上面的代码因 问题答案: 无法获得(指向)常数值的地址,这就是初始化失