public void run(String url, String path){
string newUrl = url + "/user" + path + "/2";
}
以上是一段字符串拼接的代码,我知道这么写不太规范,仅用来举个例子。以JDK8为准。请问:
1、"/user" 和 "/2" 是否保存到了jvm的常量池里面了?
2、在拼接过程中是否只 new 了 newUrl 这一个对象?如果不是,能否分析下总共 new 了几个对象?
请大神指教,谢谢!
public void run(String url, String path){
string newUrl = url + "/user" + path + "/2";
}
以上是一段字符串拼接的代码,我知道这么写不太规范,仅用来举个例子。以JDK8为准。请问:
1、"/user" 和 "/2" 是否保存到了jvm的常量池里面了?
2、在拼接过程中是否只 new 了 newUrl 这一个对象?如果不是,能否分析下总共 new 了几个对象?
请大神指教,谢谢!
如果要认真考虑new了几个对象。我想先明确对象是啥,如果对象说的是保存在堆中的,有对象头的东西,那newUrl这个变量,我感觉不能算一个对象吧。他只是保存了创建出来的对象的引用。因为从字节码层面看,newUrl就是一个占用四字节的变量,保存了对象的地址之类的信息吧。
至于到底new了几个对象,看了下1.8生成的字节码,确实是转变成了new StringBuilder(),然后通过append把四个字符串拼接,最后调用StringBuilder.toString()返回拼接后的字符串。 其实StringBuilder.toString()里边还会new一个String出来;
8 回答6.4k 阅读
1 回答4.2k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
2 回答3.2k 阅读
2 回答3.9k 阅读
1 回答2.2k 阅读✓ 已解决
3 回答1.7k 阅读✓ 已解决
StringBuilder