高级谜题总结

1.-2147483648和-(2147483648)是否相等?

分析:

因为int的数值分布是不对称的,并且2147483648已经超过了Integer.MAX_VALUE,他是Integer.MIN_VALUE的字面常量。

因此2147483648只能作为一元负操作符的操作数出现。

public class PuzzleDemo86{ public static void main(String args[]){ int i = -2147483648; System.out.println(i); } }

2.精度丢失问题:

int或long转型成float,或long转型为double会导致精度丢失。

public class PuzzleDemo87{ public static void main(String args[]){ System.out.println("Double.NaN==Double.NaN:"+(Double.NaN==Double.NaN)); long v1 = Long.MAX_VALUE; float f = (float)v1; long v2 = Long.MAX_VALUE-1; System.out.println("v1==f:"+(v1==f)); System.out.println("f==v2:"+(f==v2)); System.out.println("v1==v2:"+(v1==v2)); } }

3.List和List<Object>是不同的

4.避免在用泛型的代码中参杂原始类型。

5.在设计内部类时,需要考虑这个类是否需要使用外围类实例,如果不是,则建议使用静态内部类。

6.不能扩展一个内部类。

7.HashSet结构解析

readObject方法调用了HashMap的put方法,因此也就调用了hashCode方法。

private void readObject(java.io.ObjectInputStream s) throws java.io.IOException, ClassNotFoundException { // Read in any hidden serialization magic s.defaultReadObject(); // Read in HashMap capacity and load factor and create backing HashMap int capacity = s.readInt(); float loadFactor = s.readFloat(); map = (((HashSet)this) instanceof LinkedHashSet ? new LinkedHashMap<E,Object>(capacity, loadFactor) : new HashMap<E,Object>(capacity, loadFactor)); // Read in size int size = s.readInt(); // Read in all elements in the proper order. for (int i=0; i<size; i++) { E e = (E) s.readObject(); map.put(e, PRESENT); } }

8.在readObject中,避免直接或间接的在正在进行反序列化的对象上调用任何方法。因为可能会调用被覆写的方法。

9.常量表达式的规定:

形如 static final 的常量在被调用时是在编译期将他转换成对应常量的。其他的不管常量还是变量都是在运行期决定值的。

比如:

package a;

class A{

public static void main(){

int a = B.B1;//在这里,编译期就将B.B1转换成"b1";

}

}

package b;

class B{

public static final String B1 = "b1";

}

10. 私有成员不能被继承。
11.null不是一个编译期的常量表达式,

因此如果

String str = null;

System.out.print(str);则str的值不是在编译期决定,而是在运行期决定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值