当前位置:首页 > JAVA > 正文内容

String str="i"与 String str=new String(“i”)一样吗

高老师2年前 (2023-07-05)JAVA343
在大多数情况下,String str = "i"String str = new String("i") 是等效的,它们都创建了一个包含字符 "i" 的字符串对象。然而,在细微的方面上,它们之间存在一些差异。
1.字符串池:在Java中,字符串池(String Pool)是一块特殊的内存区域,用于存储字符串常量。当使用
String str = "i" 时,编译器首先检查字符串池中是否存在相同内容的字符串,如果存在,则直接将变量 str 指向池中的字符串对象。因此,如果你再次使用相同的字符串,编译器将重用池中的对象,而不会创建新的对象。而使用 String str = new String("i") 时,它将始终创建一个新的字符串对象,无论池中是否存在相同的字符串。
2.对象引用:在第一种情况下,str 变量直接指向字符串池中的对象。而在第二种情况下,str 变量指向通过 new 关键字创建的新的字符串对象。这意味着两者在内存中引用的是不同的对象,即使它们的内容相同。
下面是一个示例,演示了上述差异:
String str1 = "i";
String str2 = "i";

String str3 = new String("i");
String str4 = new String("i");

System.out.println(str1 == str2); // true
System.out.println(str3 == str4); // false
在这个示例中,str1str2 引用的是相同的字符串对象,因为编译器重用了字符串池中的对象。而 str3str4 引用的是不同的字符串对象,因为它们是通过 new 关键字创建的。
总结起来,尽管 String str = "i"String str = new String("i") 在大多数情况下会产生相同的结果,但它们在内部的处理方式上有所不同,这可能会对一些特定的使用场景产生影响。通常情况下,推荐使用第一种形式来创建字符串对象,因为它更具效率并利用了字符串池的特性。


扫描二维码推送至手机访问。

版权声明:本文由高久峰个人博客发布,如需转载请注明出处。

本文链接:https://blog.20230611.cn/post/449.html

分享给朋友:

“String str="i"与 String str=new String(“i”)一样吗” 的相关文章

Java不用编译直接执行

Java不用编译直接执行

public class test {     public static void main(String[] args) {     &...

java编译编码问题,java编译执行时编码问题

java编译编码问题,java编译执行时编码问题

public class test {     public static void main(String[] args) {     &...

java一个类可以有多个构造方法

java一个类可以有多个构造方法

java一个类可以有多个构造方法,根据传参类型和个数来匹配执行哪个构造方法。public class Member {     public Member(){      ...

java限制1个方法同一时间只能被一个线程访问

java限制1个方法同一时间只能被一个线程访问

java限制1个方法同一时间只能被一个线程访问public synchronized void setOrderPay(){ }加上synchronized 修饰符即可...

java final 修饰符,java通过final修饰符创建常量,,java通过final修饰符声明方法不可被修改

java final 修饰符,java通过final修饰符创建常量,,java通过final修饰符声明方法不可被修改

(1).final 修饰符通常和 static 修饰符一起使用来创建类常量。(2).父类中的 final 方法可以被子类继承,但是不能被子类重写,声明 final 方法的主要目的是防止该方法的内容被修改。public class Member {   ...

java增强型for循环

java增强型for循环

Java5 引入了一种主要用于数组的增强型 for 循环,类似js中的for inpublic class Member {     public static void main(String[]&...