要是你实在需要纠结性能的话。你可以这样写。。
int len = "stephen ".length();
char[] vals = new char[len+1];
for (int i = 0; i < 10; i++) {
vals[len] = (char)i; //是否需要转义,不确定。
System.out.println(new String(vals));
}
这样可以节约一半的内存消耗。
int len = "stephen ".length();
char[] vals = new char[len+1];
for (int i = 0; i < 10; i++) {
vals[len] = (char)i; //是否需要转义,不确定。
System.out.println(new String(vals));
}
这样可以节约一半的内存消耗。
因为java编译器会将第第一种优化成第二种,所以性能一样。
但是写第一种会更直观和更简单,易于维护。
所以大家写的时候,尽管按照第一种写吧,也不用担心性能问题。担心性能的,都是老旧的不知道几百年前的编译器了!
会有个变量存在,但是不会指向任何对象,也就是说变量会被清空的。
怎么可能会被清空。
上面是我看错了,是第二种会多一个string的句柄,就算只看语法也知道有区别啊,第二种方式里的name变量在循环结束后是可以继续使用的,并且值就是运算完之后的值。
会有个变量存在,但是不会指向任何对象,也就是说变量会被清空的。
怎么可能会被清空。
上面是我看错了,是第二种会多一个string的句柄,就算只看语法也知道有区别啊,第二种方式里的name变量在循环结束后是可以继续使用的,并且值就是运算完之后的值。嗯……这个清空是猜测的,暂时没有根据,暂时收回,回头有证据再回复哈。
会有个变量存在,但是不会指向任何对象,也就是说变量会被清空的。
怎么可能会被清空。
上面是我看错了,是第二种会多一个string的句柄,就算只看语法也知道有区别啊,第二种方式里的name变量在循环结束后是可以继续使用的,并且值就是运算完之后的值。在main方法结束后,存放在栈里的string会被回收吧
,当for循环的循环次数较大时就能明显表现出来建议用StringBuffer来连接字符串效率很高
1. 变量能更早的被回收
2. 减少错误的概率所谓推荐第二种的,完全是不了解内存分配机制吧
将String换成StringBuider或者StringBuffer,性能更好。