高级谜题总结

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的值不是在编译期决定,而是在运行期决定。

 

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值