• Java中9大内置基本数据类型Class实例和数组的Class实例


    1、Java中9大内置几本数据类型:
    对于对象来说,可以直接使用对象.getClass()或者Class.forName(className);类名.class都可以获取Class实例.
    但是我们的基本数据类型,就没有类的权限定名,也没有getClass方法.
    问题:那么如何使用Class类来表示基本数据类型的Class实例?
    byte,short,int,long,char,float,double,boolean,void关键字
    上述8种类型和void关键字,都有class属性.
    表示int的Class对象: Class clz = int.class;
    表示boolean的Class对象: Class clz = boolean.class;
    表示void的Class对象:Class clz = void.class;
    所有的数据类型都有class属性,表示都是Class对象.
    思考:
    int的包装类是Integer
    Integer.class ==?== int.class 相等吗????
    结果是false,说明是两份字节码.

    Integer 和int是同一种数据类型吗? 不是

    但是在八大基本数据类型的包装类中都有一个常量:TYPE,
    TYPE表示的是该包装类对应的基本数据类型的Class实例.
    如:<pre><code>
    Integer.TYPE----->int.class

    Integer.TYPE==int.class;//YES

    Integer.TYPE == Integer.class;//ERROR</pre></code>
    摘自jdk源码:基本数据类型包装类TYPE的实现。

     /** The {@code Class} instance representing the primitive type
     * {@code int}.
     *
     * @since   JDK1.1
     */
    public static final Class<Integer>  TYPE = (Class<Integer>) Class.getPrimitiveClass("int");
    

    /** Return the Virtual Machine's Class object for the named

    • primitive type.
      */
      static native Class getPrimitiveClass(String name);

2、数组类型的Class实例
每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象(摘自JDK原话)。
数组的Class实例:
String[] sArr1 ={"A","C"};
String[] sArr2 = {};
String[][] sArr = {};
int[] sArr = {};
表示数组的Class实例:
String[] sArr1 = {"A","C"};
Class clz = String[].class;//此时clz表示就是一个String类型的一位数组类型

所有具有相同元素类型和维数的数组才共享同一份字节码(Class对象);
注意:和数组中的元素没有一点关系.

eg:<pre><code>
public static void main(String[] args) {

    String[] s1 = {};
    String[] s2 = {"A"};
    String[] s3 = {"A","b"};
    int[] i ={};    
    System.out.println(s1.getClass() == s2.getClass());//true
    System.out.println(s1.getClass() == s3.getClass());//true
    System.out.println(s2.getClass() == s3.getClass());//true
<span class="hljs-built_in">String</span>[][] s4 = {{<span class="hljs-string">"1"</span>,<span class="hljs-string">"2"</span>}};
Class zz = s4.getClass();
System.out.println(s2.getClass() == zz);<span class="hljs-comment">//false</span>
Class zz1 = i.getClass();
System.out.println(s2.getClass() == zz1);<span class="hljs-comment">//false    </span>

}

</pre></code>

原文地址:https://blog.csdn.net/spy19881201/article/details/23995267
  • 相关阅读:
    测试人生 | 40+的年龄50W+的年薪,2线城市入职名企,他曾想放弃测试?
    干货 | 面试过了,如何谈薪资?拿高薪Offer有哪些技巧?
    测试人生 | 三十而立终圆大厂梦,测试开发开启新征程
    测试人生 | 97年双非学历的小哥哥,2线城市涨薪100%,我酸了......
    一道有趣的大厂测试面试题,你能用 Python or Shell 解答吗?
    一道大厂测试开发面试真题,你需要几分钟解答?
    测试人生 | 专科学历入职世界500强企业,二线城市年薪超30W,这个80后小哥哥很赞!
    测试人生 | 00后拿下了名企大厂 offer,这个后浪学习之路全公开
    测试人生 | 三十而已,何需惧怕!年薪40W+涨薪幅度超40%
    使用 Serverless Devs 插件快速部署前端应用
  • 原文地址:https://www.cnblogs.com/jpfss/p/11382043.html
  • Copyright © 2020-2023  润新知