博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java中的语法糖
阅读量:4635 次
发布时间:2019-06-09

本文共 954 字,大约阅读时间需要 3 分钟。

一、范型

1. C#和Java范型的区别

在C#中范型是切实存在的,List<int>和List<String>就是两种不同的类型,它们在系统运行期间生成,有自己的虚方法表和类型数据,这种实现称为类型膨胀,基于这种方法实现的范型称为真实范型。

Java语言中的范型则不一样,它只存在于源码中,在编译后的字节码文件中,就已经被替换为原来的原生类型了,并且在相应的地方插入了强制转型代码。对于运行期的java语言来说,ArrayList<int>和ArrayList<String>就是同一个类。所以范型技术实际上是java的一颗语法糖。java语言中范型的实现方法称为范型擦除,基于这种方法实现的范型称为伪范型。

a. 范型擦除前的样子

public static void main(String[] args) {        Map
map = new HashMap<>(); map.put("nihao","nihao"); map.put("haha","hah"); System.out.print(map.get("nihao")); System.out.print(map.get("haha"));}

b. 编译后反编译,范型擦除后的代码

public static void main(String[] args) {        Map map = new HashMap();        map.put("nihao","nihao");        map.put("haha","hah");        System.out.print((String) map.get("nihao"));        System.out.print((String) map.get("haha"));    }

2. 当范型遇到重载

范型擦除后ArrayList<Integer>和ArrayList<String>是同一种类型,因此无法进行重载。

 

二、自动装箱和拆箱

 

转载于:https://www.cnblogs.com/liujinhong/p/6429783.html

你可能感兴趣的文章
使用java中replaceAll方法替换字符串中的反斜杠
查看>>
Android初学第36天
查看>>
Some configure
查看>>
.net core 中的[FromBody]
查看>>
json_encode时中文编码转正常状态
查看>>
流量调整和限流技术 【转载】
查看>>
Axure 全局辅助线(转)
查看>>
正由另一进程使用,因此该进程无法访问此文件。
查看>>
27-THREE.JS 平面
查看>>
以太网基础(转)
查看>>
tp5+linux+apache php7.1.30环境下,上传图片报错:mkdir():permission denied
查看>>
单片AT89C2051 + SD卡 + 3310LCD = 音乐播放器
查看>>
dp cf 20190615
查看>>
1 线性空间
查看>>
MVC 中的 ViewModel
查看>>
机器学习
查看>>
begin.lydsy 入门OJ题库:1104:纯粹合数
查看>>
DataCleaner 3.1.1 发布,数据质量分析管理
查看>>
memcached和redis的区别和应用场景
查看>>
【sping揭秘】6、IOC容器之统一资源加载策略
查看>>