假设字符串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) 我试图了解最佳实践是什么以及为什么连接不同情况下的字符串文字和变量.例如,如果我有这样的代码
StringBuilder sb = new StringBuilder("AAAAAAAAAAAAA")
.append(B_String).append("CCCCCCCCCCC").append(D_String)
.append("EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE")
.append("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF");
Run Code Online (Sandbox Code Playgroud)
这是这样做的吗?从这篇文章中,我注意到+Strings 上的运算符创建了一个StringBuilder的新实例,连接了操作数,并返回了一个String转换,这似乎比调用更多的工作.append(); 所以,如果这是真的,那就不可能了.但那怎么样String.concat()?.append()每次串联使用是否合适?或者仅仅是变量,文字可以附加.concat()吗?
StringBuilder sb = new StringBuilder("AAAAAAAAAAAAA")
.append(B_String.concat("CCCCCCCCCCC")).append(D_String
.concat("EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE")
.concat("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"));
Run Code Online (Sandbox Code Playgroud)
针对这些情况的最佳实践和表现的一般规则是什么?我的假设是否正确+,它应该真的不被使用?
如果多个线程在没有同步的情况下调用System.out.println(String),输出是否可以交错?或者每行写入原子?该API只字不提同步的,所以这似乎是可能的,或者是由缓冲和/或虚拟机存储器模型等防止交织输出?
编辑:
例如,如果每个线程包含:
System.out.println("ABC");
Run Code Online (Sandbox Code Playgroud)
输出保证是:
ABC
ABC
Run Code Online (Sandbox Code Playgroud)
或者它可能是:
AABC
BC
Run Code Online (Sandbox Code Playgroud) 这是所有编程语言的共同点吗?进行多次打印然后使用println似乎更快但将所有内容移动到字符串并且只是打印似乎最快.为什么?
编辑:例如,Java可以在不到一秒的时间内找到所有素数高达100万 - 但是打印然后在他们自己的println上全部打印可能需要几分钟!打印高达100亿小时!
EX:
package sieveoferatosthenes;
public class Main {
public static void main(String[] args) {
int upTo = 10000000;
boolean primes[] = new boolean[upTo];
for( int b = 0; b < upTo; b++ ){
primes[b] = true;
}
primes[0] = false;
primes[1] = false;
int testing = 1;
while( testing <= Math.sqrt(upTo)){
testing ++;
int testingWith = testing;
if( primes[testing] ){
while( testingWith < upTo ){
testingWith = testingWith + testing;
if ( testingWith >= upTo){
}
else{ …Run Code Online (Sandbox Code Playgroud) 我已经看到了这个问题,它有点类似.我想知道它是否真的是影响我的应用程序性能的一个重要因素.这是我的情景.
我有这个Java webapp,它可以从电子表格上传数千个数据,每个行从上到下读取.我正在使用System.out.println()在服务器端显示应用程序当前正在读取的行.
- 我知道创建一个日志文件.实际上,我正在创建一个日志文件,同时在服务器的提示符下显示日志.
有没有其他方法在提示符上打印当前数据?