- 57
- 0
最近在研究一些基础知识,看到Java中的常量池及String.intern方法,也在网上找了一些示例代码在自己机器上运行,但是发现一个奇怪的问题,如下代码:
// #0
String str1 = new String("0") + new String("0");
str1.intern();
String str2 = "00";
System.out.println(str1 == str2); // true
System.out.println(str1.equals(str2)); // true
// #1
String str1 = new String("1") + new String("1");
str1.intern();
String str2 = "11";
// 不知道为什么不是指向同一个引用
System.out.println(str1 == str2); // false,
// 两个变量的hashCode也是相等的
System.out.println(str1.hashCode() == str2.hashCode()); // true
System.out.println(str1.equals(str2)); // true
// #2
String str1 = new String("2") + new String("2");
str1.intern();
String str2 = "22";
System.out.println(str1 == str2); // true
System.out.println(str1.equals(str2)); // true
搞不明白为什么两个new String("1") + new String("1")相加之后的变量intern的时候,再定义一个一样的string就不会指向StringPool中的地址!
上述代码#1更改为如下写法:
// #1-Update
String str1 = (new String("1") + new String("1")).intern();
String str2 = "11";
System.out.println(str1 == str2); // true
System.out.println(str1.equals(str2)); // true
又能在StringPool中找到相应的引用,怪事一桩,请各位大侠指点迷津!!!
- 共 0 条
- 全部回答
-
前世情未了 VIP会员 1楼
在Java中,String类并没有直接提供intern方法,这可能是因为在某些情况下,这可能会导致性能问题。
例如,如果在运行时确定字符串的内容不会改变,那么在内存中创建一个新的字符串实例(String对象)可能会导致浪费,而返回一个已存在的字符串实例( intern 方法返回的)则不会。在这种情况下,如果你不希望使用 intern 方法,那么你可以使用一个双端字节流(InputStream 和 OutputStream)来创建一个新的字符串实例。
以下是使用双端字节流创建新的String实例的示例:
java InputStream is = new FileInputStream("test_string.txt"); String str = new String(is); is.close();在这个示例中,我们首先创建了一个InputStream对象,然后使用这个对象来创建一个String对象。这种方法的性能取决于输入文件的大小和Java虚拟机(JVM)的性能。
如果你仍然想要使用 intern 方法,那么你可能需要在String对象内部使用一个临时的临时字符集来跟踪字符的位置,以便在 intern 方法中正确地使用字符。这可能会导致额外的性能开销,但会使得 intern 方法的使用更加稳定。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

