假设字符串a和b:
a += b
a = a.concat(b)
Run Code Online (Sandbox Code Playgroud)
引擎盖下,它们是一样的吗?
这里以concat反编译为参考.我希望能够反编译+运算符以查看它的作用.
public String concat(String s) {
int i = s.length();
if (i == 0) {
return this;
}
else {
char ac[] = new char[count + i];
getChars(0, count, ac, 0);
s.getChars(0, i, ac, count);
return new String(0, count + i, ac);
}
}
Run Code Online (Sandbox Code Playgroud) 对于字符串连接,我们可以使用concat()或concat运算符(+).
我尝试了以下性能测试,发现concat()字符串连接速度更快,内存效率更高.
字符串连接比较100,000次:
String str = null;
//------------Using Concatenation operator-------------
long time1 = System.currentTimeMillis();
long freeMemory1 = Runtime.getRuntime().freeMemory();
for(int i=0; i<100000; i++){
str = "Hi";
str = str+" Bye";
}
long time2 = System.currentTimeMillis();
long freeMemory2 = Runtime.getRuntime().freeMemory();
long timetaken1 = time2-time1;
long memoryTaken1 = freeMemory1 - freeMemory2;
System.out.println("Concat operator :" + "Time taken =" + timetaken1 +
" Memory Consumed =" + memoryTaken1);
//------------Using Concat method-------------
long time3 = System.currentTimeMillis();
long freeMemory3 …Run Code Online (Sandbox Code Playgroud) 哪一个更适合串联连接
如果我想从一串字符串变量(如str1和str2)构建一个字符串,哪一个会更好一个?
String str="This the String1 " + str1 + " merged with Sting2 " + str2;
String str=String.format("This the String1 %s merged with Sting2 %s", str1 , str2);
我认为第二个会更好,因为第一个会受到很多字符串创建的影响.
如果我错了,请纠正我?并提供相同的反馈
我正在解决Codingbat.com上的问题,并且碰到了这样一个事实:对于+=运营商来说,a += b并不一定完全等于a = a + b.这是众所周知的,已经让之前讨论过,但我使用的时候碰到了一些奇怪的事情发生charAt()上述语法,我不能做的意义相结合的方法.
说我有两个变量:
String str = "The";
String result = "";
Run Code Online (Sandbox Code Playgroud)
我想将"str"中的第一个字母添加两次到"结果".一种方法是:
result = result + str.charAt(0) + str.charAt(0);
Run Code Online (Sandbox Code Playgroud)
结果result = "TT".
但是,如果我使用+=运算符,例如:
result += str.charAt(0) + str.charAt(0);
Run Code Online (Sandbox Code Playgroud)
我得到result = "168".很明显,字符添加已经发生('T'的ASCII代码是84,84*2 = 168).
我想知道在使用+=运算符的第一种情况下实际发生了什么.根据关于赋值运算符的文档:E1 op= E2相当于E1 = (T)((E1) op (E2)).所以我希望后一个表达式输出"168"就像使用+=运算符一样.但以下输出"TT"正确,而不是"168":
result = (String)(result …Run Code Online (Sandbox Code Playgroud) String playerlist;
for(Player p : allplayers){
playerlist += p.getDisplayName() + ", ";
}
sendMessage(playerlist);
Run Code Online (Sandbox Code Playgroud)
我怎么能做到这一点?我需要在for-loop中有一个变量,然后在循环外部访问它.
谢谢,对不起,如果这是一个非常愚蠢的问题.我只是想不出来.