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 }