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

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

高老师2年前 (2023-07-05)JAVA347
在大多数情况下,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增强型for循环

java增强型for循环

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

java数组,java创建数组,java创建数组并赋值,java数组元素个数,java foreach 循环数组,java数组排序

java数组,java创建数组,java创建数组并赋值,java数组元素个数,java foreach 循环数组,java数组排序

(1).创建数组double[] myList = new double[size];  //推荐创建方式 double myList[] = new double[size];  ...

java获取时间戳,java时间戳获取

java获取时间戳,java时间戳获取

System.out.println("当前时间戳(秒): " + System.currentTimeMillis()/1000); System.out.println("当前时间戳(毫秒): " +&nb...

java正则表达式判断字符串是否包含,java判断字符串是否包含

java正则表达式判断字符串是否包含,java判断字符串是否包含

pattern表示正则表达式,接收正则表达式作为参数例子:String content = "my name is gaojiufeng"; String pattern = "....

java正则表达式捕获组

java正则表达式捕获组

java正则表达式的捕获组捕获组可以将匹配到的结果根据正则中的括号进行分组,这里变量我加了$符,php转java的坏习惯,懒得改了,能跑就行// 匹配字符串 String $line = "gaojiufeng 1994! ok?...

java lookingAt匹配字符串和java matches匹配字符串,java正则replaceAll,java正则replaceFirst

java lookingAt匹配字符串和java matches匹配字符串,java正则replaceAll,java正则replaceFirst

(4).java lookingAt匹配字符串和java matches匹配字符串lookingAt不要求整个字符串全匹配,例如me和me_you都是匹配的,但是lookingAt从第一个字符串开始匹配,匹配失败了也不会继续匹配,意味着me和you_me是无法匹配的matches匹配字符串要求全部匹...