java 大杂烩
2017-03-06 本文已影响81人
时芥蓝
Http
代理
正向代理代理的对象是客户端,反向代理代理的对象是服务端
Integer 值的比较
在jdk1.5的环境下,有如下4条语句:
Integer i01 = 59; //1
int i02 = 59; //2
Integer i03 =Integer.valueOf(59);//3
Integer i04 = new Integer(59)。//4
解析:
- Integer i01=59 的时候,会调用 Integer 的 valueOf 方法,
public static Integer valueOf(int i) {
assert IntegerCache.high>= 127;
if (i >= IntegerCache.low&& i <= IntegerCache.high)
return IntegerCache.cache[i+ (-IntegerCache.low)];
return new Integer(i); }
这个方法就是返回一个 Integer 对象,只是在只是在返回之前,看作了一个判断,判断当前 i 的值是否在** [-128,127]** 区别,且IntegerCache
中是否存在此对象,如果存在,则直接返回引用,否则,创建一个新的对象。
在这里的话,因为程序初次运行,没有 59
,所以,直接创建了一个新的对象。
-
int i02=59
,这是一个基本类型,存储在栈中。 -
Integer i03 =Integer.valueOf(59);
因为 IntegerCache 中已经存在此对象,所以,直接返回引用,这个引用和i01一样。 -
Integer i04 = new Integer(59) ;
直接创建一个新的对象。 -
System. out .println(i01== i02); i01
是Integer
对象,i02
是int
,这里比较的不是地址,而是值。Integer
会自动拆箱成int
,然后进行值的比较。所以,为真。 -
System. out .println(i01== i03);
因为i03
返回的是i01
的引用,所以,为真。 -
System. out .println(i03==i04);
因为i04
是重新创建的对象,所以i03,i04
是指向不同的对象,因此比较结果为假。 -
System. out .println(i02== i04);
因为i02
是基本类型,所以此时i04
会自动拆箱,进行值比较,所以,结果为真。
内部类
public interface Father {}
public interface Mother {}
public class Son implements Father, Mother {}
public class Daughter implements Father{
class Mother_ implements Mother{ }
}
其实对于这个实例我们确实是看不出来使用内部类存在何种优点,但是如果Father、Mother不是接口,而是抽象类或者具体类呢?这个时候我们就只能使用内部类才能实现多重继承了
其实使用内部类最大的优点就在于它能够非常好的解决多重继承的问题,但是如果我们不需要解决多重继承问题,那么我们自然可以使用其他的编码方式,但是使用内部类还能够为我们带来如下特性:
1、内部类可以用多个实例,每个实例都有自己的状态信息,并且与其他外围对象的信息相互独立。
2、在单个外围类中,可以让多个内部类以不同的方式实现同一个接口,或者继承同一个类。
3、创建内部类对象的时刻并不依赖于外围类对象的创建。
4、内部类并没有令人迷惑的“is-a”关系,他就是一个独立的实体。
5、内部类提供了更好的封装,除了该外围类,其他类都不能访问。