Android:Java常量池+泛型面试题集锦

作者: 像程序那样思考 | 来源:发表于2019-07-28 20:33 被阅读8次

    前言

    很多人面试之前,可能没有在互联网公司工作过或者说工作过但年头较短,不知道互联网公司技术面试都会问哪些问题? 再加上可能自己准备也不充分,去面试没几个回合就被面试官几个问题打蒙了,最后以惨败收场。

    下述是我收录整理的Android面试题汇总,由于篇幅原因,在这只把Java常量池+泛型的题目列举出来,后续还会更新其余面试题内容,大家可以关注一下我,及时知晓我更新的知识点,同时这份面试集锦的整理也花费了我很多时间,有需要的朋友可以帮忙转发分享下,点个赞~

    一、 常量池

    1、Interger中的128(-128~127)

    当数值范围为-128~127时:如果两个new出来Integer对象,即使值相同,通过“==”比较结果为false,但两个对象直接赋值,则通过“==”比较结果为“true,这一点与String非常相似。 当数值不在-128~127时,无论通过哪种方式,即使两个对象的值相等,通过“==”比较,其结果为false; 当一个Integer对象直接与一个int基本数据类型通过“==”比较,其结果与第一点相同; Integer对象的hash值为数值本身;

    @Override
    public int hashCode() {
    return Integer.hashCode(value);
    }
    

    2、为什么是-128-127?

    在Integer类中有一个静态内部类IntegerCache,在IntegerCache类中有一个Integer数组,用以缓存当数值范围为-128~127时的Integer对象。

    二、泛型

    泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是安全简单。

    泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。

    它提供了编译期的类型安全,确保你只能把正确类型的对象放入 集合中,避免了在运行时出现ClassCastException。

    使用Java的泛型时应注意以下几点:

    • 泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。
    • 同一种泛型可以对应多个版本(因为参数类型是不确定的),不同版本的泛型类实例是不兼容的。
    • 泛型的类型参数可以有多个。
    • 泛型的参数类型可以使用extends语句,例如。习惯上称为“有界类型”。
    • 泛型的参数类型还可以是通配符类型。例如Class<?> classType = Class.forName("java.lang.String");

    1、T泛型和通配符泛型

    • ? 表示不确定的java类型。
    • T 表示java类型。
    • K V 分别代表java键值中的Key Value。
    • E 代表Element。

    2、泛型擦除

    Java中的泛型基本上都是在编译器这个层次来实现的。在生成的Java字节码中是不包含泛型中的类型信息的。使用泛型的时候加上的类型参数,会在编译器在编译的时候去掉。这个过程就称为类型擦除。

    泛型是通过类型擦除来实现的,编译器在编译时擦除了所有类型相关的信息,所以在运行时不存在任何类型相关的信息。例如 List在运行时仅用一个List来表示。这样做的目的,是确保能和Java 5之前的版本开发二进制类库进行兼容。你无法在运行时访问到类型参数,因为编译器已经把泛型类型转换成了原始类型。

    3、限定通配符

    一种是<? extends T>它通过确保类型必须是T的子类来设定类型的上界, 另一种是<? super T>它通过确保类型必须是T的父类来设定类型的下界。 另一方面表 示了非限定通配符,因为可以用任意类型来替代。 例如List<? extends Number>可以接受List或List。

    4、泛型面试题

    你可以把List传递给一个接受List参数的方法吗?

    对任何一个不太熟悉泛型的人来说,这个Java泛型题目看起来令人疑惑,因为乍看起来String是一种Object,所以 List应当可以用在需要List的地方,但是事实并非如此。真这样做的话会导致编译错误。如 果你再深一步考虑,你会发现Java这样做是有意义的,因为List可以存储任何类型的对象包括String, Integer等等,而List却只能用来存储Strings。

    Array中可以用泛型吗?

    Array事实上并不支持泛型,这也是为什么Joshua Bloch在Effective Java一书中建议使用List来代替Array,因为List可以提供编译期的类型安全保证,而Array却不能。

    以上就是Android Java常量池+泛型的面试题目,后续还会更新其余面试题内容,大家可以关注一下我,及时知晓我更新的知识点,同时这份面试集锦的整理也花费了我很多时间,有需要的朋友可以帮忙转发分享下,点个赞~

    Android架构师之路很漫长,一起共勉吧!
    ——————分割线——————
    简书点赞可以有好几种赞,长按点赞按钮就会有选项,大家点赞的时候,麻烦点个超赞~在这里先谢谢您的支持啦!

    相关文章

      网友评论

        本文标题:Android:Java常量池+泛型面试题集锦

        本文链接:https://www.haomeiwen.com/subject/graprctx.html