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

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

高老师3年前 (2023-07-05)JAVA472
在大多数情况下,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 Character 类,java判断字符是否是一个字母,java判断字符是否是一个数字,java判断字符是否是一个空白,java判断字符是否是小写字母,java判断字符是否是大写字母,java转换字符为大写,java转换字符为小写

java Character 类,java判断字符是否是一个字母,java判断字符是否是一个数字,java判断字符是否是一个空白,java判断字符是否是小写字母,java判断字符是否是大写字母,java转换字符为大写,java转换字符为小写

java判断字符是否是一个字母System.out.println(Character.isLetter('a'));java判断字符是否是一个数字System.out.println(Character.isDigit('0'));java判断字符是否是一个空白Sy...

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睡眠一分钟,java睡眠五秒钟

java睡眠方法,java睡眠函数,java睡眠时间,java睡眠一分钟,java睡眠五秒钟

(1).java睡眠函数Thread.sleep(时间);  //单位为毫秒(2).java睡眠函数例子Date dNow = new Date(); SimpleDateFormat ft = new&nbs...

java 可变参数

java 可变参数

java 可变参数// 定义方法 public static int sum(int... number) {     int result = 0;  &nb...

java FileOutPutStream 向文件写入数据,java FileOutPutStream 向文件写入数据,java OutputStreamWriter 向文件写入数据

java FileOutPutStream 向文件写入数据,java FileOutPutStream 向文件写入数据,java OutputStreamWriter 向文件写入数据

java FileOutPutStream 向文件写入数据// 文件 String file = "learn.txt"; // 写入内容1024 byte[] content = {  ...

java自定义包提示程序包不存在的注意点

java自定义包提示程序包不存在的注意点

因为习惯了直接java执行脚本,每次不编译,提示程序包不存在。我经常习惯于java ./Console.java 执行脚本,可能php写多了。只需要编译下生成class文件即可。...