为了账号安全,请及时绑定邮箱和手机立即绑定

字符串生成器为什么每次执行结果不一样

字符串生成器为什么每次执行结果不一样

水月心影镜中花 2017-08-02 22:19:00
package xuexi; import javax.sql.rowset.spi.SyncFactory; public class Jerque {     public static void main(String[] args) {         // TODO Auto-generated method stub         String str ="";         long starTime = System.currentTimeMillis();         for(int i = 0; i < 10000; i++){             str = str + i;         }         long endTime = System.currentTimeMillis();         long time = endTime - starTime;         System.out.println(time);         StringBuilder builder = new StringBuilder();         starTime = System.currentTimeMillis();         for(int j = 0; j < 10000; j++){             builder.append(j);         }         endTime = System.currentTimeMillis();         time = endTime - starTime;         System.out.println(time);     } }请问我写的和书上一样,为什么结果不一样?并且每次执行都不同。 书上的结果是第一个time为668,第二个time是2 System.currentTimeMillis()和append()这个是做什么用的? StringBuilder这个是专门用来重载字符串的么? 求大神指教,小子在此谢过了!
查看完整描述

3 回答

已采纳
?
产品经理不是经理

TA贡献481条经验 获得超143个赞

  1. 时间不一样很正常。这个与你电脑有关。

  2. System.currentTimeMillis()是获取当前时间与1970年凌晨之间的毫秒数。append()是StringBuilder类的一个方法,追加字符串。

  3. 不是重载字符串。它是可变字符串,String类是不可变字符串,使用StringBuilder类可以减少多余的字符串,节省内存空间。

查看完整回答
反对 回复 2017-08-02
?
浅笑若风

TA贡献6条经验 获得超1个赞

  1. 毫无疑问结果肯定不一样,因为使用System.currentTimeMillis()这个是按照毫秒数级别计算,与你的计算机本身的计算性能有关系。

  2. 上面的代码目的在于比较String 和StringBuffer 的计算开销能力,String 的存储能力不及StringBuffer ,所以每次循环增加一个字符长度的是需要重新划去一块内存空间存储,而StringBuffer不一样,他的存储空间比String大的太多,不许要开辟新的空间,所以计算速度比较快,两者之间的差别在于String适应用于比字符段较小数据的存储计算,而StringBuffer适用于大的数据存储计算。

  3. System.currentTimeMillis()获取当前时间毫秒数按照楼上多说的那种从1970 年的那个基数计算,append()方法则是通过追加的方式去添加一个字符串。

  4. StringBuilder 是一个数据类型,看上面说的你就知道了。

查看完整回答
反对 回复 2017-08-02
  • 3 回答
  • 0 关注
  • 1687 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信