gir*_*iri 101 java string core new-operator
我们通常使用new
关键字创建对象,例如:
Object obj = new Object();
Run Code Online (Sandbox Code Playgroud)
字符串是对象,但我们不使用new
它们来创建它们:
String str = "Hello World";
Run Code Online (Sandbox Code Playgroud)
为什么是这样?我可以用一个字符串new
吗?
dan*_*ben 127
除了已经说过的内容之外,Java中的字符串文字 [即,字符串"abcd"
但不喜欢new String("abcd")
]被实现 - 这意味着每次引用"abcd"时,您都会获得对单个String
实例的引用,而不是新实例每一次.所以你将拥有:
String a = "abcd";
String b = "abcd";
a == b; //True
Run Code Online (Sandbox Code Playgroud)
但如果你有
String a = new String("abcd");
String b = new String("abcd");
Run Code Online (Sandbox Code Playgroud)
那么它有可能
a == b; // False
Run Code Online (Sandbox Code Playgroud)
(如果有人需要提醒,总是.equals()
用来比较字符串; ==
测试物理平等).
实习字符串文字很好,因为它们经常被使用多次.例如,考虑(设计)代码:
for (int i = 0; i < 10; i++) {
System.out.println("Next iteration");
}
Run Code Online (Sandbox Code Playgroud)
如果我们没有字符串实习,那么"下一次迭代"需要实例化10次,而现在它只会被实例化一次.
Jam*_*dle 31
字符串是Java中的"特殊"对象.Java设计人员明智地决定使用Strings,以至于他们需要自己的语法和缓存策略.当你通过说:
String myString = "something";
Run Code Online (Sandbox Code Playgroud)
myString是对String对象的引用,其值为"something".如果你以后声明:
String myOtherString = "something";
Run Code Online (Sandbox Code Playgroud)
Java非常聪明,可以确定myString和myOtherString是相同的,并将它们作为同一个对象存储在全局String表中.它依赖于您无法修改字符串来执行此操作的事实.这样可以降低所需的内存量,并可以更快地进行比较.
相反,如果你写的话
String myOtherString = new String("something");
Run Code Online (Sandbox Code Playgroud)
Java将为您创建一个全新的对象,与myString对象不同.
Cro*_*ode 16
String a = "abc"; // 1 Object: "abc" added to pool
String b = "abc"; // 0 Object: because it is already in the pool
String c = new String("abc"); // 1 Object
String d = new String("def"); // 1 Object + "def" is added to the Pool
String e = d.intern(); // (e==d) is "false" because e refers to the String in pool
String f = e.intern(); // (f==e) is "true"
//Total Objects: 4 ("abc", c, d, "def").
Run Code Online (Sandbox Code Playgroud)
希望这清除了一些疑虑.:)
我们通常使用String文字以避免创建不必要的对象。如果我们使用new运算符创建String对象,那么它将每次都创建新对象。
例:
String s1=“Hello“;
String s2=“Hello“;
String s3= new String(“Hello“);
String s4= new String(“Hello“);
Run Code Online (Sandbox Code Playgroud)
对于内存中的上述代码:
归档时间: |
|
查看次数: |
59567 次 |
最近记录: |