自己的误区

          本篇博客持续更新,发现有误区的地方会加进来.......................................

 

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)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值