String a = "abc";和String a = new String("abc");的区别
时间: 2023-11-12 13:31:47 浏览: 87
String a = "abc" 和 String a = new String("abc") 的区别在于它们在内存中的存储位置不同。
当使用 String a = "abc" 时,Java 会先检查字符串池中是否已经存在 "abc" 这个字符串,如果存在,直接将 a 指向字符串池中的 "abc";如果不存在,会在字符串池中新建一个 "abc" 字符串,然后将 a 指向这个新建的字符串。
而当使用 String a = new String("abc") 时,Java 会在堆内存中新建一个字符串对象,其内容为 "abc",然后将 a 指向这个新建的字符串对象。此时,字符串池中也会存在一个 "abc" 字符串,但是它不会被 a 引用,因为 a 引用的是堆内存中的字符串对象。
因此,String a = "abc" 是一种常量池的写法,而 String a = new String("abc") 是一种在堆内存中新建字符串对象的写法。
相关问题
string s1=abc和new string
s1 是一个字符串变量,它被赋值为 "abc"。
new string 是 C# 中用于创建新字符串对象的语法。例如:string s2 = new string("abc"); 意思就是创建一个新的字符串对象,值为 "abc",并将其赋值给变量 s2。
String x = "abc"; String a = new String("abc"); System.out.println(x == a);
这段代码会输出 false。
这是因为 `x` 和 `a` 是两个不同的对象,虽然它们的值相同。在 Java 中,使用 `new` 关键字创建的字符串对象,不管它们的内容是否相同,都会被视为不同的对象。而直接使用字符串字面量创建的字符串对象,则会被 Java 编译器优化为同一个对象,因此比较它们的地址时会返回 `true`。所以,如果想比较字符串的值是否相等,应该使用 `equals` 方法,而不是 `==` 运算符。例如,`x.equals(a)` 会返回 `true`。
阅读全文