第03章(常用工具类)

  1 /*****************
  2 ***第三章常用工具类
  3 *******知识点:
  4 **************1.系统相关
  5 ******************1.1 System类
  6 ******************1.2 Runtime类
  7 ******************1.3 输入类
  8 **************************1.3.1 Scanner类
  9 **************************1.3.2 BufferedReader类
 10 **************2.数字相关
 11 ******************2.1 整型
 12 **************************2.1.1 Byte 类
 13 **************************2.1.2 Short类
 14 **************************2.1.3 Integer类
 15 **************************2.1.4 Long类
 16 ******************2.2 浮点型
 17 **************************2.2.1 Float类
 18 **************************2.2.2 Double类
 19 ******************2.3 字符型
 20 **************************2.3.1 Character类
 21 ******************2.4 布尔型
 22 **************************2.4.1 Boolean类
 23 ******************2.5 数学类
 24 **************************2.5.1 Math类
 25 **************************2.5.2 StrictMath类
 26 ******************2.6 工具类
 27 **************************2.6.1 Random类
 28 **************************2.6.2 BigDecimal类
 29 **************************2.6.3 正则表达式
 30 **************3.日期相关
 31 ******************3.1 Date类
 32 ******************3.2 Calendar类
 33 ******************3.3 GregorianCalendar类
 34 ******************3.4 DateFormat类
 35 ******************3.5 SimpleDateFormat类
 36 ******************3.6 TimeZone类
 37 **************4.字符串相关
 38 ******************4.1 String类
 39 ******************4.2 StringBuilder类
 40 ******************4.3 StringBuffer类
 41 */
 42 import java.lang.*; //导入相关包
 43 import java.util.*;
 44 import java.util.regex.*; 
 45 import java.math.*;
 46 import java.text.*;
 47 
 48 public class test3{
 49     public static void main(String[] args) throws Exception {
 50         showDemo("1.系统相关");
 51         demoSystem();//演示系统相关
 52         
 53         showDemo("2.数字相关");
 54         demoNumber();//演示数字相关
 55         
 56         showDemo("3.日期相关");
 57         demoDate();//演示日期相关
 58         
 59         showDemo("4.字符串相关");
 60         demoString();//演示字符串相关
 61     }
 62     
 63     /*
 64     *    抽取打印演示函数  用于打印演示功能提示
 65     */    
 66     public static void showDemo(String demoStr){
 67         System.out.println("演示:" + demoStr);
 68     }
 69     
 70     /*
 71     *  抽取日期打印函数  用于显示日期打印
 72     */
 73     public static void showDate(String str,Calendar c_Calendar){
 74         System.out.println("当前时区是:" + c_Calendar.getTimeZone().getDisplayName() + " " 
 75                             + c_Calendar.getTimeZone().getID()  + " "
 76                             + c_Calendar.getTimeZone().getRawOffset() + " "
 77                             + "\r\n" + str +":"
 78                             + c_Calendar.get(Calendar.YEAR) + "年"
 79                             + (c_Calendar.get(Calendar.MONTH)+1) + "月"  //注意加不然少1个月
 80                             + (c_Calendar.get(Calendar.DATE )) + "日"  
 81                             + c_Calendar.get(Calendar.HOUR_OF_DAY) + "时"
 82                             + c_Calendar.get(Calendar.MINUTE) + "分"                            
 83                             );
 84     }
 85     
 86     
 87     /***************1.系统相关
 88     ******************1.1 System类
 89     ******************1.2 Runtime类
 90     ******************1.3 输入类
 91     **************************1.3.1 Scanner类
 92     **************************1.3.2 BufferedReader类
 93     */
 94     public static void demoSystem() throws Exception {
 95         /**1.1 System类**/
 96         /*char c_a = (char)(System.in.read());  //获取控制台输入字符
 97         System.out.println("获取键盘输入为:" + c_a);*/
 98         Date d_d = new Date(System.currentTimeMillis());
 99         System.out.println("当前时间(Long类型 没转化前)为:" + System.currentTimeMillis()); //获取当前时间(精确到毫秒)  返回long
100         System.out.println("当前时间(转化后)为:" + d_d.toString()); //获取当前时间  返回日期时间
101         System.out.println("当前用户是:" + System.getProperty("user.name"));  //获取系统当前用户名
102         System.out.println("当前用户是:" + System.getProperty("os.name"));  //获取当前操作系统名
103     
104         /**1.2 Runtime类**/
105         //1.2.1 获取虚拟机信息
106         Runtime r_a = Runtime.getRuntime();
107         System.out.println("当前虚拟机的运行内存为:" + r_a.totalMemory());//获取虚拟机当前内存
108         
109         //1.2.2 调用windows程序并执行
110         //Process p_a = r_a.exec("notepad");  //调用windows文本编辑器
111         //p_a.waitFor(); //设置程序为等待
112         //System.out.println("程序返回值:" + p_a.exitValue());//获取调用程序返回值  没错误返回0  其他非0
113         
114         /******************1.3 输入类
115         **************************1.3.1 Scanner类
116         **************************1.3.2 BufferedReader类
117         */    
118         
119         /*********1.3.1 Scanner类**********/
120         //1.3.1.1获取屏幕输入数据
121         Scanner scan = null;
122         //scan = new Scanner(System.in);
123         //System.out.print("请输入字符:");
124         //while(true){
125         //    String str = scan.nextLine();
126         //    if(str.equals(":q")) break;
127         //    System.out.println("输入字符为:" + str);
128         //    str = "";
129         //    str = null ;
130         //}
131         
132         //1.3.1.2 构造字符串
133         //scan = new Scanner("123 andw, sd weddw dasd;    d asdadsa|   sdad&  ~sdadsad");//默认使用空格来转换
134         //while(scan.hasNext()){
135         //    System.out.println("构造字符串:" + scan.next());
136         //}
137         
138         /*********1.3.2 BufferedReader类**********/
139         //更多时候用于读取文件  文件章节再详细介绍
140     }
141     
142     
143     /***************2.数字相关
144     ******************2.1 整型
145     **************************2.1.1 Byte 类
146     **************************2.1.2 Short类
147     **************************2.1.3 Integer类
148     **************************2.1.4 Long类
149     ******************2.2 浮点型
150     **************************2.2.1 Float类
151     **************************2.2.2 Double类
152     ******************2.3 字符型
153     **************************2.3.1 Character类
154     ******************2.4 布尔型
155     **************************2.4.1 Boolean类
156     ******************2.5 数学类
157     **************************2.5.1 Math类
158     **************************2.5.2 StrictMath类
159     ******************2.6 工具类
160     **************************2.6.1 Random类
161     **************************2.6.2 BigDecimal类
162     **************************2.6.3 正则表达式
163     */
164     public static void demoNumber(){
165     /**2.1 整型**/
166     //2.1.1 Byte 类 
167         byte b_a,b_b;
168         String b_str = "126";
169         b_a = 127 ;
170         
171         Byte b_Byte_1 = new Byte(b_a);    //通过byte类型初始化 注意new时候必须初始化    
172         b_b = b_Byte_1.byteValue();  //赋值
173         System.out.println("调用byteValue(byte)方法后b_b值为:" + b_b);
174         
175         b_Byte_1 = new Byte(b_str);//通过string类型初始化
176         b_b = b_Byte_1.byteValue();//赋值
177         System.out.println("调用byteValue(string)方法后b_b值为:" + b_b);
178         
179         b_b = b_Byte_1.parseByte("125");//调用parseByte(string)方法 参数string类型
180         System.out.println("调用parseByte(string)方法后b_b值为:" + b_b);
181         
182         b_b = b_Byte_1.parseByte("124",10);//调用parseByte(string,int)方法 参数string类型,10表示进制
183         System.out.println("调用parseByte(string,int)方法后b_b值为:" + b_b);
184         
185         Byte b_Byte_2 = b_Byte_1.valueOf((byte)123);//调用valueOf(byte)方法 参数byte类型
186         System.out.println("调用valueOf(byte)方法后b_Byte_2值为:" +b_Byte_2.byteValue());
187         
188         b_Byte_2 = b_Byte_1.valueOf("122");//调用valueOf(string)方法 参数string类型
189         System.out.println("调用valueOf(string)方法后b_Byte_2值为:" +b_Byte_2.byteValue());
190         
191         b_Byte_2 = b_Byte_1.valueOf("122",8);//调用valueOf(string,int)方法 参数string类型 8表示进制
192         System.out.println("调用valueOf(string,int)方法后b_Byte_2值为:" +b_Byte_2.byteValue());        
193         System.out.println("调用toString()方法后b_Byte_2值为:" +b_Byte_2.toString()); 
194         //注意跟byteValue()方法区别  一个返回是string类型  一个返回是byte类型
195         
196         System.out.println("Byte类型的最大值为:" + Byte.MAX_VALUE);//获取最大值
197         System.out.println("Byte类型的最小值为:" + Byte.MIN_VALUE);//获取最小值
198         System.out.println("Byte类型的二进制位数为:" + Byte.SIZE + " 占用字节数:" + Byte.SIZE/8 );//获取位数
199             
200     //2.1.2 Short类
201         short s_a = 1024 ;
202         Short s_Short = new Short(s_a);
203         System.out.println("Short类型的最大值为:" + Short.MAX_VALUE);//获取最大值
204         System.out.println("Short类型的最小值为:" + Short.MIN_VALUE);//获取最小值
205         System.out.println("Short类型的二进制位数为:" + Short.SIZE + " 占用字节数:" + Short.SIZE/8 );//获取位数
206         //用法跟Byte类型  这里就不再细述了  用到时查看相关API即可    
207         
208     //2.1.3 Integer类
209         int i_a = 1025 ;
210         Integer i_Integer = new Integer(i_a);
211         System.out.println("Integer类型的最大值为:" + Integer.MAX_VALUE);//获取最大值
212         System.out.println("Integer类型的最小值为:" + Integer.MIN_VALUE);//获取最小值
213         System.out.println("Integer类型的二进制位数为:" + Integer.SIZE + " 占用字节数:" + Integer.SIZE/8);//获取位数
214         //用法跟Byte类型  这里就不再细述了  用到时查看相关API即可
215         
216     //2.1.4 Long类
217         long l_a = 1026L;
218         Long l_Long = new Long(l_a);
219         System.out.println("Long类型的最大值为:" + Long.MAX_VALUE);//获取最大值
220         System.out.println("Long类型的最小值为:" + Long.MIN_VALUE);//获取最小值
221         System.out.println("Long类型的二进制位数为:" + Long.SIZE + " 占用字节数:" + Long.SIZE/8);//获取位数
222         //用法跟Byte类型  这里就不再细述了  用到时查看相关API即可
223         
224     /**2.2 浮点型**/
225     //2.2.1 Float类
226         float f_a;
227         String s_Float_str_1 = "1.51";    
228         Float f_Float_1 = new Float(s_Float_str_1);
229         System.out.println("f_Float_1是否为一个非数字值:" + f_Float_1.isNaN());
230         System.out.println("调用byteValue()方法:" + f_Float_1.byteValue());//注意强转后结果可能发生变化
231         f_a = f_Float_1.intValue();
232         
233         System.out.println("f_a值为:" + f_a);
234         
235         System.out.println("Float类型的最大值为:" + Float.MAX_VALUE);//获取最大值
236         System.out.println("Float类型的最小值为:" + Float.MIN_VALUE);//获取最小值
237         System.out.println("Float类型的二进制位数为:" + Float.SIZE + " 占用字节数:" + Float.SIZE/8);//获取位数
238         //用法跟Byte类型  这里就不再细述了  用到时查看相关API即可
239         
240     //2.2.2 Double类
241         double d_d = 0.15;
242         Double d_Double = new Double(d_d);
243         System.out.println("Double类型的最大值为:" + Double.MAX_VALUE);//获取最大值
244         System.out.println("Double类型的最小值为:" + Double.MIN_VALUE);//获取最小值
245         System.out.println("Double类型的二进制位数为:" + Double.SIZE + " 占用字节数:" + Double.SIZE/8);//获取位数
246         //用法跟Byte类型  这里就不再细述了  用到时查看相关API即可
247     
248     /**2.3 字符型**/    
249     //2.3.1    Character类
250         char c_a,c_b,c_c;
251         c_a = 'a';
252         c_b = (char)((int)c_a - 32) ;//A大写  大写编码比小写小32
253         c_c = '3';
254         System.out.println(c_a + " 是否为字母:" + Character.isLetter(c_a));
255         System.out.println(c_a + " 是否为小写字母:" + Character.isLowerCase(c_a));
256         System.out.println(c_b + " 是否为大写字母:" + Character.isUpperCase(c_b));
257         System.out.println(c_c + " 是否为数字:" + Character.isDigit(c_c));
258 
259     /**2.4 布尔型**/
260     //2.4.1    Boolean类
261         boolean b_boolean = false;
262         String b_boolean_str = "True";
263         Boolean b_Boolean = new Boolean(b_boolean);
264         System.out.println("b_Boolean值为:" + b_Boolean.booleanValue());
265         
266         b_Boolean = new Boolean(b_boolean_str);//对参数 忽略大小写
267         System.out.println("b_Boolean值为:" + b_Boolean.booleanValue());
268         System.out.println("调用valueOf()方法为:" + b_Boolean.valueOf("sdadasdsa"));
269         System.out.println("调用valueOf()方法为:" + b_Boolean.valueOf("TRUE"));//不区分大小写
270         System.out.println("调用valueOf()方法为:" + b_Boolean.valueOf("true"));//不区分大小写
271     
272     /**2.5 数学类**/
273     //2.5.1  Math类()
274         System.out.println("求绝对值函数abs():" + Math.abs(-1.2));
275         System.out.println("求三角余弦函数cos():" + Math.cos(60));
276         System.out.println("求三角正弦函数sin():" + Math.sin(30));
277         System.out.println("求三角正切函数sin():" + Math.tan(45));
278         System.out.println("求平方根函数sqrt():" + Math.sqrt(16));
279         System.out.println("求最大值max():" + Math.max(16,19));
280         System.out.println("求最小值min():" + Math.min(-1,-2));
281         System.out.println("求随机数random():" + Math.random());
282         //更多使用见API文档
283     //2.5.2  StrictMath类
284         System.out.println("求绝对值函数abs():" + StrictMath.abs(-1.2));
285         System.out.println("求三角余弦函数cos():" + StrictMath.cos(60));
286         System.out.println("求三角正弦函数sin():" + StrictMath.sin(30));
287         System.out.println("求三角正切函数sin():" + StrictMath.tan(45));
288         System.out.println("求平方根函数sqrt():" + StrictMath.sqrt(16));
289         System.out.println("求最大值max():" + StrictMath.max(16,19));
290         System.out.println("求最小值min():" + StrictMath.min(-1,-2));
291         System.out.println("求随机数random():" + StrictMath.random());
292         //更多使用见API文档
293         
294     // 需注意:   Math运行效率高  StrictMath可以保障在不同的平台上运行都得到相同的结果    
295         
296     /**2.6 工具类**/
297     //2.6.1  Random类
298         Random r_Random = new Random();
299         int i_Random = r_Random.nextInt(10);//返回0...10之间的随机数(不含10)
300         System.out.println("随机数为:" + i_Random);
301         
302         boolean b_Random = r_Random.nextBoolean();//随机返回 true /false
303         System.out.println("随机数为:" + b_Random);
304         
305         float f_Random = r_Random.nextFloat();
306         System.out.println("随机数为:" + f_Random);
307         
308         double d_Random = r_Random.nextDouble();//跟nextFloat()方法返回位数不一致。需注意
309         System.out.println("随机数为:" + d_Random);
310         //通过上面对比这个类是然并卵   推荐使用 Math.random() 方法更加方便
311         
312     //2.6.2  BigDecimal类
313         //四种格式化小数位数方法
314         double d_PI = Math.PI;
315         double d_BigDecimal = 1234.146;
316         System.out.println("PI为:" + d_PI);
317         
318         //第一种格式化  转换最简单
319         System.out.println("第一种格式化:" + 
320                            new DecimalFormat("0.00").format(d_PI));//会自行四舍五入
321                            
322         //第二种格式化  打印最简单
323         System.out.println("第二种格式化"+ String.format("%.2f", d_BigDecimal));//会自行四舍五入
324         
325         //第三种格式化
326         BigDecimal b_BigDecimal = new BigDecimal(d_BigDecimal);
327         d_BigDecimal = b_BigDecimal.setScale(2,BigDecimal.ROUND_CEILING).doubleValue();
328         //setScale(int,RoundingMode) 其中int为取的位数,RoundingMode为取数模式。
329         //本次为正无穷大舍入模式  更多模式可查看API文档
330         System.out.println("第三种格式化"+ d_BigDecimal);
331         
332         //第四种格式化 转化最灵活
333         NumberFormat n_NumberFormat = NumberFormat.getNumberInstance();//获取系统对数字格式的设置
334         n_NumberFormat.setMaximumFractionDigits(2);//设置为2为小数
335         System.out.println("第四种格式化" + n_NumberFormat.format(d_BigDecimal));//会自行四舍五入  一般采用1,000.00方式
336             
337 
338         //BigDecimal 四大基本运算使用
339         System.out.println("BigDecimal类相加:" + new BigDecimal(10).add(new BigDecimal(20)).toString());
340         System.out.println("BigDecimal类相减:" + new BigDecimal(10).subtract(new BigDecimal(20)).toString());
341         System.out.println("BigDecimal类相乘:" + new BigDecimal(10).multiply(new BigDecimal(20)).toString());
342         System.out.println("BigDecimal类相除:" + new BigDecimal(10).divide(new BigDecimal(20)).toString());
343         
344                     
345     //2.6.3  正则表达式
346     //使用步骤:1.定义编译器对象  2.定义匹配器  3.做匹配
347     
348         String regex = "^([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)"
349                        + "|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$";//检验是否为邮箱正则表达式
350                        
351         Pattern p_Pattern = Pattern.compile(regex);//定义并初始化正则表达式编译器
352         String email1 = "lishi_hzj@foxmail.com";
353         String email2 = "dadsdsadads";
354         
355         Matcher m_Matcher1 = p_Pattern.matcher(email1);  //定义并初始化匹配器
356         Matcher m_Matcher2 = p_Pattern.matcher(email2);
357         
358         System.out.println("匹配是否为邮箱地址:" + m_Matcher1.matches());//第一种
359         System.out.println("匹配是否为邮箱地址:" + m_Matcher2.matches());
360         System.out.println("匹配是否为邮箱地址:" + p_Pattern.matches(regex,email1));//第二种调用方法
361     }
362     
363     
364     /***************3.日期相关
365     ******************3.1 Date类
366     ******************3.2 Calendar类
367     ******************3.3 GregorianCalendar类
368     ******************3.4 DateFormat类
369     ******************3.5 SimpleDateFormat类
370     ******************3.6 TimeZone类
371     */
372     public static void demoDate(){
373     /**3.1 Date类**/
374         Date d_Date = new Date(System.currentTimeMillis());
375         System.out.println("当前时间为:" + new SimpleDateFormat("yyyy-MM-dd HH:mm").format(d_Date));
376         //该类已过时  不建议使用  建议使用Calendar代替
377         
378     /**3.2 Calendar类**/
379         Calendar c_Calendar = Calendar.getInstance();
380         c_Calendar.setTimeInMillis(System.currentTimeMillis());
381         showDate("当前时间",c_Calendar);
382         
383         c_Calendar.add(Calendar.DATE ,-1);                   
384         showDate("昨天是",c_Calendar);
385         
386         c_Calendar.add(Calendar.DATE,2);    //因为前面-1了               
387         showDate("明天是",c_Calendar);
388         
389         c_Calendar.add(Calendar.DATE,-1); //因为前面+2了
390         
391         c_Calendar.add(Calendar.MONTH,1);           
392         showDate("一个月后是",c_Calendar);
393         
394         c_Calendar.add(Calendar.MONTH,-1);    //因为前面+1了
395         c_Calendar.add(Calendar.YEAR,1);            
396         showDate("一年后是",c_Calendar);
397         
398     /**3.3 GregorianCalendar类**/
399         GregorianCalendar g_GregorianCalendar = new GregorianCalendar();
400         System.out.println("是否为闰年:" + g_GregorianCalendar.isLeapYear(2012));
401         
402     /**3.4 DateFormat类**/ 
403         DateFormat d_DateFormat1 = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);  
404         DateFormat d_DateFormat2 = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM);  
405         DateFormat d_DateFormat3 = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG);  
406         DateFormat d_DateFormat4 = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);  
407           
408         System.out.println("DateFormat.SHORT:"+d_DateFormat1.format(d_Date));  
409         System.out.println("DateFormat.MEDIUM:"+d_DateFormat2.format(d_Date));  
410         System.out.println("DateFormat.LONG:"+d_DateFormat3.format(d_Date));  
411         System.out.println("DateFormat.FULL:"+d_DateFormat4.format(d_Date));  
412         
413     /**3.5 SimpleDateFormat类**/
414         SimpleDateFormat s_SimpleDateFormat1 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
415         SimpleDateFormat s_SimpleDateFormat2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
416         SimpleDateFormat s_SimpleDateFormat3 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒 E ");
417         SimpleDateFormat s_SimpleDateFormat4 = new SimpleDateFormat("一年中的第 D 天 一年中第w个星期 一月中第W个星期 在一天中k时 z时区");
418         System.out.println(s_SimpleDateFormat1.format(d_Date));
419         System.out.println(s_SimpleDateFormat2.format(d_Date));
420         System.out.println(s_SimpleDateFormat3.format(d_Date));
421         System.out.println(s_SimpleDateFormat4.format(d_Date));
422     
423     /**3.6 TimeZone类**/
424         TimeZone t_TimeZone = TimeZone.getDefault();//获取系统默认时区
425         System.out.println("系统默认时区:" + t_TimeZone.getTimeZone("GMT-8").getID());//获取时区ID
426         System.out.println("系统默认时区:" + t_TimeZone.getDisplayName());//获取时区名称
427         
428         
429     //总结:上诉几个类使用起来都不是非常方便。无论是从执行效率还是线程安全上来说都不是最好的选择。
430     //建议推荐第三方库类    Joda-Time类库
431     }
432     
433     /**************4.字符串相关
434     ******************4.1 String类
435     ******************4.2 StringBuilder类
436     ******************4.3 StringBuffer类
437     */
438     public static void demoString(){
439     /**4.1 String类**/
440     System.out.println("======操作相同字符串======");
441     int time = 50000;
442     String s="";
443     long begin = System.currentTimeMillis();
444     for(int i=0;i < time; i++){
445         s +=  "java";
446     }
447     long end = System.currentTimeMillis();
448     System.out.println("操作相同字符串" + s.getClass().getName() + "类型使用的时间为:" +(end - begin) + "毫秒");
449     
450     /**4.2 StringBuilder类**/
451     StringBuilder sb =new StringBuilder();
452     begin = System.currentTimeMillis();
453     for(int i=0;i < time; i++){
454         sb.append("java");
455     }
456     end = System.currentTimeMillis();
457     System.out.println("操作相同字符串" + sb.getClass().getName() + "类型使用的时间为:" +(end - begin) + "毫秒");
458     
459     /**4.3 StringBuffer类**/
460     StringBuffer sb_buf =new StringBuffer();
461     begin = System.currentTimeMillis();
462     for(int i=0;i < time; i++){
463         sb_buf.append("java");
464     }
465     end = System.currentTimeMillis();
466     System.out.println("操作相同字符串" + sb_buf.getClass().getName() + "类型使用的时间为:" +(end - begin) + "毫秒");
467 
468     s = "";
469     sb.delete(0,sb.length());
470     sb_buf.delete(0,sb_buf.length());
471     
472     
473     System.out.println("======操作不同字符串======");
474     begin = System.currentTimeMillis();
475     for(int i=0;i < time; i++){
476         s += "java" + String.valueOf(i);
477     }
478     end = System.currentTimeMillis();
479     System.out.println("操作不同字符串" + s.getClass().getName() + "类型使用的时间为:" +(end - begin) + "毫秒");
480     
481     begin = System.currentTimeMillis();
482     for(int i=0;i < time; i++){
483         sb.append("java" + String.valueOf(i));
484     }
485     end = System.currentTimeMillis();
486     System.out.println("操作不同字符串" + sb.getClass().getName() + "类型使用的时间为:" +(end - begin) + "毫秒");
487     
488     begin = System.currentTimeMillis();
489     for(int i=0;i < time; i++){
490         sb_buf.append("java" + String.valueOf(i));
491     }
492     end = System.currentTimeMillis();
493     System.out.println("操作不同字符串" + sb_buf.getClass().getName() + "类型使用的时间为:" +(end - begin) + "毫秒");
494 
495     
496     System.out.println("======String效率问题======");
497     begin = System.currentTimeMillis();
498     s += "I" + "love" + "java"; 
499     end = System.currentTimeMillis();
500     System.out.println("使用+=操作字符串" + s.getClass().getName() + "类型使用的时间为:" +(end - begin) + "毫秒");
501     
502     begin = System.currentTimeMillis();
503     s = s + "I" + "love" + "java"; 
504     end = System.currentTimeMillis();
505     System.out.println("使用= +操作字符串" + s.getClass().getName() + "类型使用的时间为:" +(end - begin) + "毫秒");
506     
507     //其他基本操作自行查看API(如:连接、查找、替换、分隔、比较、拼接等)  注意区分 == 和 equals 的区别
508     //推荐单字符串操作时使用  s += "str";来代替 s = s + "str" ; 前者效率更高
509     //一般情况下执行效率:StringBuilder > StringBuffer > String
510     //所以
511     //    1.当字符串相加操作或者改动较少的情况下,建议使用 String
512     //    2.当字符串相加操作较多的情况下,建议使用StringBuilder
513     //    3.如果采用了多线程,则使用StringBuffer。
514     }
515 }
原文地址:https://www.cnblogs.com/ciade/p/4756731.html