黑马程序员技术交流社区
标题:
Java编程:常见问题汇总
[打印本页]
作者:
小兮网络
时间:
2013-12-28 15:41
标题:
Java编程:常见问题汇总
每天在写Java程序,其实里面有一些细节大家可能没怎么注意,这不,有人总结了一个我们编程中常见的问题。虽然一般没有什么大问题,但是最好别这样做。另外这里提到的很多问题其实可以通过Findbugs来帮我们进行检查出来。
字符串连接误用
错误的写法:
String s =
""
;
for
(Person p : persons) {
s +=
", "
+ p.getName();
}
s = s.substring(
2
);
//remove first comma
正确的写法:
StringBuilder sb =
new
StringBuilder(persons.size() *
16
);
// well estimated buffer
for
(Person p : persons) {
if
(sb.length() >
0
) sb.append(
", "
);
sb.append(p.getName);
}
错误的使用StringBuffer
错误的写法:
StringBuffer sb =
new
StringBuffer();
sb.append(
"Name: "
);
sb.append(name +
'\n'
);
sb.append(
"!"
);
...
String s = sb.toString();
问题在第三行,append char比String性能要好,另外就是初始化StringBuffer没有指定size,导致中间append时可能重新调整内部数组大小。如果是JDK1.5最好用StringBuilder取代StringBuffer,除非有线程安全的要求。还有一种方式就是可以直接连接字符串。缺点就是无法初始化时指定长度。
正确的写法:
StringBuilder sb =
new
StringBuilder(
100
);
sb.append(
"Name: "
);
sb.append(name);
sb.append(
"\n!"
);
String s = sb.toString();
或者这样写:
String s =
"Name: "
+ name +
"\n!"
;
测试字符串相等性
错误的写法:
if
(name.compareTo(
"John"
) ==
0
) ...
if
(name ==
"John"
) ...
if
(name.equals(
"John"
)) ...
if
(
""
.equals(name)) ...
上面的代码没有错,但是不够好。compareTo不够简洁,==原义是比较两个对象是否一样。另外比较字符是否为空,最好判断它的长度。
正确的写法:
if
(
"John"
.equals(name)) ...
if
(name.length() ==
0
) ...
if
(name.isEmpty()) ...
数字转换成字符串
错误的写法:
""
+ set.size()
new
Integer(set.size()).toString()
正确的写法:
String.valueOf(set.size())
利用不可变对象(Immutable)
错误的写法:
zero =
new
Integer(
0
);
return
Boolean.valueOf(
"true"
);
作者:
冷月
时间:
2014-1-18 10:12
赞一个 呵呵
作者:
panzhenglian
时间:
2014-1-18 18:15
学习了,支持一个
作者:
乐宝myhoney
时间:
2014-1-20 03:03
顶一个!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2