转Java一段时间了,发现Java里的有些习惯跟Win32下编程有点差别,初学者很容易上当
1.字符串比较

Java陷阱String a = "aa;
Java陷阱
String b = "aa22222".substring(02); // b = "aa"
Java陷阱
System.out.println(a == b);
输出为 false
为什么呢?因为实际上Java里除简单类型外,==比较的实际是实例的地址
String比较内容是否相同应该用 a.equals(b) / a.equalsIgnoreCase(b)

不过同时我也发现一个很有意思的问题
Java陷阱String a = "aa;
Java陷阱
String b = "aa";
Java陷阱System.out.println(a 
== b);
输出的结果为true!
我想这应该是Java为了节省资源,给a/b分配的是同一个地址吧
未验证,高手指教

顺变说一下,Java里String内容是不可更改的
Java陷阱String a = "aa";
Java陷阱
= "bb";
这种写法也不会报错,但实际上a已不再是原来的那个"a"了,a会被重新分配

因此如果一个String内容会被频繁修改,应该用StringBuffer替代
Java陷阱StringBuffer buf = new StringBuffer();
Java陷阱buf.append(
"aa");
Java陷阱buf.append(
"bb");
Java陷阱
Java陷阱
return buf.toString();


2. 数组做参数
数组做为参数时,在函数内可以修改其内容,但不可以改变其地址
Java陷阱public static void test1(byte[] args)
输出: 100  12  12


3.  数组索引越界
Java陷阱byte z[] = new byte[1];
Java陷阱z[
100= 123;
Java陷阱System.out.println(z[
100]);Java陷阱
不会报错,输出为 100


4. ResultSet读取
如果某一列值为NULL,当用getString取此列值时返回的不是空字符串,而是字符串"NULL"  (JDK1.5已修正)

相关文章:

  • 2021-08-04
  • 2021-04-28
  • 2022-01-21
  • 2022-12-23
  • 2021-11-27
  • 2021-07-31
  • 2022-02-15
  • 2021-07-30
猜你喜欢
  • 2021-12-24
  • 2021-09-04
  • 2021-11-04
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案