【java学习】装箱与拆箱、泛型

来源:互联网 发布:b超三个数据看男女技巧 编辑:程序博客网 时间:2024/05/16 11:12

1,拆箱与装箱

1)装箱

把基本数据类型赋给对应的包装类。
比如:把int赋值给Integer,对他的操作就需要用它的方法了。
是值类型转换为引用类型的过程。

2)拆箱

把一个包装类赋给基本数据类型。
由引用类型转换为值类型的过程。

3)demo

                Integer i = 1;//装箱                int j = i;//拆箱                //典型应用                List list = new ArrayList();                list.add(1);//装箱                list.add(new Integer(1));//没有引入装箱概念之前                Iterator it = list.iterator();                while (it.hasNext()) {                    int x = (Integer)it.next();//拆箱                }

4)频繁的装箱和拆箱很浪费效率

装箱时,生成的是全新的引用对象,这会有时间损耗,效率降低。
在代码中应避免装箱和拆箱的操作。
可以使用泛型来减少这样的操作。

2,引用类型和值类型

1)引用类型:

变量将引用(或“指向”)原始值。不创建任何副本。引用类型包括类、接口、委托和装箱值类型。

2)值类型:

只复制变量的值。也就是基本数据类型(四类八种)
四类:整型、浮点型、字符型、逻辑型。

3,泛型

1)泛型:

用于解决安全问题,是一个安全机制。

2)优点:

a.将运行时期出现问题classCastException,转移到了编译时期。便于解决问题,让运行时间减少,安全。
b.避免了强制转换(显式转换)。

3)举例

list.add("abc");//插入字符串Integer num = (Integer)list.get(0);//运行时会出错,但编码时发现不了

泛型运行程序员在编写集合代码时,限制集合的处理类型,从而在程序编译时就发现问题。如:

list.add("abc");//插入字符串String s = list.get(0);//取出的依然是String,安全

再如带泛型的方法:

public <T> T getA(T a){//此处<T>先声明泛型T,然后使用时,传进来是什么类型,返回什么类型,同样避免了强制转换    return a;}

同样可以有带泛型的类(只作用在非静态成员,静态成员需要单独声明泛型)。
使用注意:
1,泛型类型必须是引用类型
2,<> 念 typeof,表示处理的类型

4)JVM与泛型

所以在创建泛型对象时请指明类型,让编译器尽早的做参数检查,而不是让JVM运行时抛出类不匹配的异常。
不要忽略编译器的警告信息,那意味着潜在的ClassCastException等着你。

①JVM泛型擦除

JVM中没有泛型,只有普通类和普通方法。
所有泛型类的类型参数在编译时都会被擦除,处理成普通类和普通方法。
在编译阶段,所有泛型类的类型参数都会被Object或者它们的限定边界来替换。(类型擦除)

原创粉丝点击