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

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这个是专门用来重载字符串的么?
求大神指教,小子在此谢过了!


水月心影镜中花
浏览 1688回答 3
3回答

产品经理不是经理

时间不一样很正常。这个与你电脑有关。System.currentTimeMillis()是获取当前时间与1970年凌晨之间的毫秒数。append()是StringBuilder类的一个方法,追加字符串。不是重载字符串。它是可变字符串,String类是不可变字符串,使用StringBuilder类可以减少多余的字符串,节省内存空间。

慕的地8582982

ZVTZPLLHMMFLYUUDKSKGDEBXGPNNNNZMEKGYOESSFSVGRNJIZAGQMGACBSCCMTDGWGOYLVFHYVBIEYCZYVRAGDDDFLYJTMCMOFBSEHKOOIFPCWSXNHHXLBUUHMVQZJKJGCHEMBECFATAANQGWVLVFCTJGGCELVHVBLEBCWICPPPEUNDXMPQGHLYENNNQNDEHCTNGPZWCSMYYNXWZPHJWMPJTXMUNXDPFDMWBBUEHTJQPPTWFTMNQGXAEBUADGFBEIZIOLOLXKBNEESPSPZSJZIYIXGNDNQTMVLMKZJMDJVHHHPFLBNBHQWQTTUUQZDMFSCNTKEYBWGRHQYCCFBOEYOQNNMMPHXHLUZSNOSLLEBBOXTEHQFPFWZKTCGWMJSBRIBDSXACLBQGWLIXISOQNJAWTWYBEIYHXAQVRTQTQTQMWGIRHKGJFBRVFVKIQOXAWYIEMIDGQNDZBLOHJMPEPEHWMWMCEUEPKUQMILUXAQZQTJFPYAQTCMWAWGJJSBXNJEOQTQUIRHKMVRURIFBEBEUQSVFIVYORGKHKZQTEGQBXORADGCTIMVEPZORZVLBKHKNBKNXUHJXNQGPGVFPBDGVYUXNCMOMCPMIMOKTWZETIFBSBRAQOWLHLPYNLBWMSADMPZVLOLBKMJZWSBXZVYEUEUQZIMCFVHDTPSIWTPAKMBXBFIKAQTOWEOJMBWUDMDOWMJGCZVXARETPLHLVKAXOYTJNWNPAVEIYBJZCLURUSOAPEOLBRACTBKMCSIYCFVLBJLAFOKZVFVEOWLAQUDHDTWSUEBXGXAWADUXZWZWJZCMWHPZVMPZVSPFNRADTIYWYAKOPQTRBWGWYQZPEJZWZCEAKBXFILWKUDNKHDLGWMVMIYB

浅笑若风

毫无疑问结果肯定不一样,因为使用System.currentTimeMillis()这个是按照毫秒数级别计算,与你的计算机本身的计算性能有关系。上面的代码目的在于比较String 和StringBuffer 的计算开销能力,String 的存储能力不及StringBuffer ,所以每次循环增加一个字符长度的是需要重新划去一块内存空间存储,而StringBuffer不一样,他的存储空间比String大的太多,不许要开辟新的空间,所以计算速度比较快,两者之间的差别在于String适应用于比字符段较小数据的存储计算,而StringBuffer适用于大的数据存储计算。System.currentTimeMillis()获取当前时间毫秒数按照楼上多说的那种从1970 年的那个基数计算,append()方法则是通过追加的方式去添加一个字符串。StringBuilder 是一个数据类型,看上面说的你就知道了。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java