String str = "i" 与 String str = new String("i")一样嘛?
时间: 2024-02-12 08:53:01 浏览: 23
在Java中,这两种方式都可以创建一个字符串对象,但是它们的内存分配方式不同。
使用String str = "i"方式创建字符串时,Java编译器会首先检查字符串池中是否存在值为"i"的字符串对象。如果存在,则直接返回该对象的引用;如果不存在,则在字符串池中创建一个新的字符串对象,并返回该对象的引用。
而使用String str = new String("i")方式创建字符串时,会在堆内存中创建一个新的字符串对象,并将值设置为"i"。如果字符串池中已经存在值为"i"的字符串对象,那么在堆内存中创建的字符串对象并不会被加入字符串池中,而是独立存在于堆内存中。
因此,虽然这两种方式都可以创建一个值为"i"的字符串对象,但是它们所引用的对象可能不同。
相关问题
String str=i与 String str=new String(“i”)一样吗?
不完全一样。
在Java中,使用“=”运算符创建对象时,它将引用现有的对象。因此,当您执行以下操作时:
```
String str1 = "i";
String str2 = "i";
```
它们引用相同的字符串对象,因为字符串常量是在编译时创建的,并在内存中重用。
另一方面,当您使用new运算符创建字符串对象时,它会在堆中创建一个新的字符串对象。因此,当您执行以下操作时:
```
String str1 = new String("i");
String str2 = new String("i");
```
它们引用不同的字符串对象,即使它们包含相同的字符序列。
需要注意的是,如果您在创建字符串时使用new运算符,则会创建一个新的字符串对象,即使已经存在具有相同字符序列的字符串常量。因此,以下代码会创建两个不同的字符串对象:
```
String str1 = "i";
String str2 = new String("i");
```
因此,str1和str2引用不同的字符串对象。
Stringstr="i与 String str=new String(“i”)一样吗?
不完全一样。在Java中,使用双引号括起来的字符串字面量是一个String对象。所以,String str = "i" 创建的字符串对象是直接存储在字符串常量池中的。而使用 new String("i") 创建的字符串对象是通过在堆中创建一个新的String对象来表示的。尽管它们的值都是相同的,但它们在内存中的存储方式是不同的,因此它们不是完全相同的。