Java陷阱
转Java一段时间了,发现Java里的有些习惯跟Win32下编程有点差别,初学者很容易上当
1.字符串比较
String a = "aa;
String b = "aa22222".substring(0, 2); // b = "aa"
System.out.println(a == b);为什么呢?因为实际上Java里除简单类型外,==比较的实际是实例的地址
String比较内容是否相同应该用 a.equals(b) / a.equalsIgnoreCase(b)
不过同时我也发现一个很有意思的问题
String a = "aa;
String b = "aa";
System.out.println(a == b);我想这应该是Java为了节省资源,给a/b分配的是同一个地址吧
未验证,高手指教
顺变说一下,Java里String内容是不可更改的
String a = "aa";
a = "bb";因此如果一个String内容会被频繁修改,应该用StringBuffer替代
StringBuffer buf = new StringBuffer();
buf.append("aa");
buf.append("bb");
return buf.toString();2. 数组做参数
数组做为参数时,在函数内可以修改其内容,但不可以改变其地址
public static void test1(byte[] args)
{
args[0] = 12;
}
public static void test2(byte[] args)
{
args = new byte[100];
args[0] = 13;
}
public static void main(String[] args)
{
byte a[] = new byte[1];
a[0] = 100;
System.out.println(a[0]);
test1(a);
System.out.println(a[0]);
test2(a);
System.out.println(a[0]);
}
3. 数组索引越界
byte z[] = new byte[1];
z[100] = 123;
System.out.println(z[100]);
4. ResultSet读取
如果某一列值为NULL,当用getString取此列值时返回的不是空字符串,而是字符串"NULL" (JDK1.5已修正)




浙公网安备 33010602011771号