相关疑难解决方法(0)

Java中表达"new String(...)"的目的是什么?

在查看在线代码示例时,我有时会通过使用new运算符将String常量赋值给String对象.

例如:

String s;
...
s = new String("Hello World");
Run Code Online (Sandbox Code Playgroud)

当然,这与之相比

s = "Hello World";
Run Code Online (Sandbox Code Playgroud)

我不熟悉这种语法,也不知道目的或效果是什么.由于String常量通常存储在常量池中,然后以JVM处理String常量的任何表示形式存在,甚至还会在堆上分配任何内容?

java string

63
推荐指数
3
解决办法
2万
查看次数

Java String.substring方法潜在的内存泄漏?

我正在浏览String类API,看起来像substring方法导致潜在的内存泄漏,因为它与原始String共享相同的字符数组.

如果原始字符串很大,则子字符串返回的小字符串可以防止原始字符串(由大数组备份)从Java中的垃圾收集.

任何想法或我读错了API.

java string memory-leaks

15
推荐指数
2
解决办法
7363
查看次数

String.substring在Java中究竟做了什么?

我一直以为如果我这样做String s = "Hello World".substring(0, 5),那么我就得到一个新的字符串s = "Hello".Java API文档中也记录了这一点:"返回一个新字符串,它是该字符串的子字符串".

但当我看到以下两个链接时,我开始怀疑.

Java中表达"new String(...)"的目的是什么?

毕竟被认为无用的字符串构造函数证明是有用的

基本上,他们说如果我使用String s = "Hello World".subString(0, 5),我仍然得到一个String,其中包含"Hello World"的char数组.

为什么?Java是否真的以这种方式实现了子串?为什么这样?为什么不返回一个全新的更短的子串?

java string

9
推荐指数
2
解决办法
2万
查看次数

我有一个字符串变量和另一个分配给同一个变量的字符串.那怎么老字符串?

假设我有一个字符串

msg = "hello"
Run Code Online (Sandbox Code Playgroud)

现在我得到来自字符串的子串msgmsg.substring(1,msg.length())

并将子字符串存储到msg.

所以msg指的是新的字符串.如果旧字符串也保留在java的缓冲区中,那么如何访问它?

java string

4
推荐指数
1
解决办法
128
查看次数

为什么不可变的新String("fish")!= new String("fish")?

我记得读过一篇可能在Bloch的Effective Java中的部分,它说大多数情况下,在哪里

String a = "fish";
String b = "fish";
Run Code Online (Sandbox Code Playgroud)

在大多数情况下,a == b因为字符串是不可变的.但是由于临时构造对象或其他一些东西,新的String("fish")会产生一个独特的对象引用.

我通过Bloch章节了解了equals(),不变性和对象创建,但是找不到这一点我记得!! 撕掉我的头发,有没有人记得这是什么原因的描述?它甚至可能不在EJ中,但我想找到它.提示:这解释的是我的实际问题.

java puzzle immutability effective-java

0
推荐指数
1
解决办法
295
查看次数

在Java中删除字符串

我知道字符串(至少在Java中)是不可变的.我不是要清空字符串的内容.

如果我这样做,我会用这个: output.setText( outputString );

我的问题是:如果你想通过放弃存储字符串的位来最小化程序所需的空间量,有没有办法做到这一点?

java string

0
推荐指数
1
解决办法
115
查看次数