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個贊
時間不一樣很正常。這個與你電腦有關。
System.currentTimeMillis()是獲取當前時間與1970年凌晨之間的毫秒數。append()是StringBuilder類的一個方法,追加字符串。
不是重載字符串。它是可變字符串,String類是不可變字符串,使用StringBuilder類可以減少多余的字符串,節省內存空間。


淺笑若風
TA貢獻6條經驗 獲得超1個贊
毫無疑問結果肯定不一樣,因為使用System.currentTimeMillis()這個是按照毫秒數級別計算,與你的計算機本身的計算性能有關系。
上面的代碼目的在于比較String 和StringBuffer 的計算開銷能力,String 的存儲能力不及StringBuffer ,所以每次循環增加一個字符長度的是需要重新劃去一塊內存空間存儲,而StringBuffer不一樣,他的存儲空間比String大的太多,不許要開辟新的空間,所以計算速度比較快,兩者之間的差別在于String適應用于比字符段較小數據的存儲計算,而StringBuffer適用于大的數據存儲計算。
System.currentTimeMillis()獲取當前時間毫秒數按照樓上多說的那種從1970 年的那個基數計算,append()方法則是通過追加的方式去添加一個字符串。
StringBuilder 是一個數據類型,看上面說的你就知道了。
添加回答
舉報
0/150
提交
取消