我想知道做
是否有一些好处sb.append('\n').toString();
在:
sb.append("\n").toString();
"\n"
代替'\n'
表现。
具有字符而不是字符串的版本在内存方面会更有效吗?或者编译器会发现字符串是实际的字符吗?
答案 0 :(得分:1)
在课程java.lang.AbstractStringBuilder
中,添加一个char
将确保/ 1
扩展容量,而追加CharSequence
或String
将同样对象的长度。
可以说,在后面的案例中调用length
会有轻微的开销。
你几乎不会注意到它。
有人可能会争辩说,附加一个String
字面值会产生实际内容的开销,但同样应该被认为是最小的开销。
答案 1 :(得分:1)
我做了一个小实验来测试两个选项的性能:
似乎'\ n'在大规模操作中肯定更快。
但规模较小,难以察觉。即使是内存消耗似乎也非常微不足道。
此代码附加\ n,1000次:
package test;
public class StringAppend {
public static void main(String[] args) {
//Run 1
long startTime = System.nanoTime();
long startMem = Runtime.getRuntime().freeMemory();
StringBuilder sb1 = new StringBuilder("This is a test");
for (int i = 1; i <= 1000; i++) {
sb1.append("\n");
}
sb1.append("To Test \"\\n\"");
System.out.println("sb1 = " + sb1.toString());
long endTime = System.nanoTime();
long endMem = Runtime.getRuntime().freeMemory();
//Run 2
long startTime2 = System.nanoTime();
long startMem2 = Runtime.getRuntime().freeMemory();
StringBuilder sb2 = new StringBuilder("This is a test");
for (int i = 1; i <= 1000; i++) {
sb1.append('\n');
}
sb1.append("To Test '\\n'");
long endTime2 = System.nanoTime();
long endMem2 = Runtime.getRuntime().freeMemory();
System.out.println("Run1: append \"\\n\"execution time [" + (endTime - startTime) + " nanos], Memory " + "[" + (endMem - startMem) + "]");
System.out.println("Run2: append '\\n' execution time [" + (endTime2 - startTime2) + " nanos], Memory " + "[" + (endMem2 - startMem2) + "]");
}
}
以下是我在高性能笔记本电脑上发现的结果:
Run1:追加“\ n”执行时间[767526 nanos],Memory [0]
Run2:追加'\ n'执行时间[121823 nanos],Memory [0]
答案 2 :(得分:0)
Java确实为单个字符串创建了一个字符串实例。
@Html.ActionLink("Register", "Signup", "Account", null, new { @class = "call-to-action", id = "registerLink" })