因为 String 被设计成一种安全的字符串, 避免了 C/C++中的尴尬。因此在内部操作的时候会频
繁的进行对象的交换, 因此它的效率不如 StringBuffer。 如果需要频繁的进行字符串的增删操
作的话最好用 StringBuffer。 比如拼 SQL 文, 写共函。 另: 编绎器对 String 的+操作进行了一
定的优化。
x = "a" + 4 + "c"
会被编绎成
x = new StringBuffer().append("a").append(4).append("c").toString()
但:
x = “a”;
x = x + 4;
x = x + “c”;
则不会被优化。 可以看出如果在一个表达式里面进行 String 的多次+操作会被优化, 而多个表
达式的+操作不会被优化。
3.3 技巧
1.在 Servlet2.3 与 JSP1.1 以前画面 post 到后台的数据是通过 ISO88591 格式进行编码的, 则当
遇到全角日文字的时候,在后台 request 得到的数据可能就是乱码,这个时候就得自己进行编
码转换,通过 String.getBytes(String enc)方法得到一个字节流,然后通过 String(byte[] bytes,
String enc)这个构造函数得到一个用新的编码生成的字符串.例如将 ISO88591 的字符串转换
成 Shift_JIS 的字符串,方法如下:
public staticString convertString(String str) {
if(str == null) {returnnull; }
try{
byte[] buf = str.getBytes("ISO8859_1");
return newString(buf, "Shift_JIS");
} catch (Exception ex) {ex.printStackTrace();returnnull; }
}
不过在最新的 Servlet2.3 与 Jsp1.2 中可以通过 request.setCharacterEncoding 来进行设置取值
的码制,不需要自己再做转换。
2.因为 Java 在计算 String 的长度是以字符为单位的, 因此一个全角与半角的字符长度是一样
的, 但是 DB 中往往是根据字节来计算长度的, 因此我们在做 Check 的时候得要判断 String 的
字节长, 可以用以下的方法:
public staticString length(String str) {
if(str == null) {return 0; }
returnstr.getBytes().length;
}
4.数值,字符,布尔对象与简单类型的操作
简单的对照表如下: