本篇博客持续更新,发现有误区的地方会加进来.......................................
1.
printf("%f\n",2.2+1/4);
以为会输出2.45
实际上输出时2.2。
以为1/4是0.25
实际上是0。
因为1和4都是int型的。若改为1.0/4就是2.45了。
2.最近写个C/S的东东,传送消息的时候是先发送消息长度再发送消息本身。发送消息的长度采用了sendStr.length()获得。然后将sendStr.getBytes()传送给客户端。
在上述过程中出现了问题,分析:
String.length()返回字符串的字符个数,一个中文算一个字符;
String.getBytes().length返回字符串的字节长度,一个中文两个字节;
所以在传送的时候如果有中文字符,传出去的长度会把一个中文字符当一个,导致出错。
编码实际上是一个大问题,具体详见另一篇博客: http://wjy320.iteye.com/blog/2065895
3,一直以为java中final修饰的是不能更改的,如果用final修饰List或者Set可不可以调用add和remove方法呢?当然是可以了:
private static final Set<String> mySet;
static{
mySet=new HashSet<String>();
}
public static void main(String args[]){
mySet.add("hello");
mySet.add("world");
System.out.println(mySet);
mySet.remove("hello");
System.out.println(mySet);
}
//运行结果:
[hello, world]
[world]
用final修饰的set,只是在栈上的这个引用这辈子只能指向初始化时在堆中分配的那个hashset了,但是add和remove是堆中实例化对象的方法,对堆中的对象进行操作的当然可以用了。只要mySet引用不便就行了,始终指向那个hashset就行了。
4.看看下面代码:
public class HeadOOM {
private String string=null;
public static void main(String args[]){
HeadOOM headOOM=new HeadOOM();
headOOM.string="hello";
headOOM=null;
System.out.println(headOOM.string);
}
}
//运行结果:
Exception in thread "main" java.lang.NullPointerException
at com.get.set.HeadOOM.main(HeadOOM.java:20)