zoukankan      html  css  js  c++  java
  • Java中的语法糖

    一、范型

    1. C#和Java范型的区别

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

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

    a. 范型擦除前的样子

    复制代码
    public static void main(String[] args) {
            Map<String, String> 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>是同一种类型,因此无法进行重载。

    二、自动装箱和拆箱

    from: https://www.cnblogs.com/liujinhong/p/6429783.html

  • 相关阅读:
    pat甲级 1155 Heap Paths (30 分)
    pat甲级 1152 Google Recruitment (20 分)
    蓝桥杯 基础练习 特殊回文数
    蓝桥杯 基础练习 十进制转十六进制
    蓝桥杯 基础练习 十六进制转十进制
    蓝桥杯 基础练习 十六进制转八进制
    51nod 1347 旋转字符串
    蓝桥杯 入门训练 圆的面积
    蓝桥杯 入门训练 Fibonacci数列
    链表相关
  • 原文地址:https://www.cnblogs.com/GarfieldEr007/p/10205286.html
Copyright © 2011-2022 走看看