zoukankan      html  css  js  c++  java
  • 装箱和拆箱

    装箱:值类型--->引用类型

    拆箱:引用类型--->值类型

    装箱拆箱会浪费一定的时间

    判断是否发生了拆箱或者装箱,首先要判断这两种数据类型是否存在继承关系

    装箱时用什么类型装的箱,拆箱时就该用什么类型拆箱

    int num=10;
    object obj=num;
    double n=(double)obj;//此处报错,指定的转换无效
    Animal an=new Dog();//这个叫隐式类型转换,不叫装箱
    Dog dog=(Dog)an;//这个叫显示类型转换,不叫拆箱

    方法重载时,如果具有该类型的重载,那就不叫拆箱或者装箱

    int num=10;
    Test(num);
    public void Test(object obj){}
    public void Test(int num){}//此时调用的是这个方法,不会发生装箱操作,调用最匹配的

    接口与值类型之间的装箱与拆箱

    int n=10;
    IComparable com=n;//装箱

    1、以下代码发生了几次装箱?

    int n=10;
    object o=n;//第一次装箱
    n=100;
    Console.WriteLine(n+","+(int)o);//(int)o发生了一次拆箱

    答案:3次装箱,1次拆箱

    用“+”连接字符串时,内部会调用string.Concat(),重载很多,此处调用的是string.Concat(object,object,object),所以在第一个和第三个参数时,都发生了一次装箱

    2、以下代码装箱了?如果发生了装箱,请说明哪句代码装箱了,为什么?

    int n=10;
    string s1=n.ToString();
    string s2=n.GetType().ToString();
    Console.WriteLine(s1+"			"+s2);

    答案:1次装箱

    由于GetType()不是虚方法,子类没有重写,所以调用时需要通过object来调用

    3、以下代码有没有发生装箱?如果有,几次?

    string s1="a";
    int n=10;
    double d=9.9;
    object o=10;//装箱
    string s2="X";
    string s3=s1+n+d+o+s2;
    Console.WriteLine(s3);

    答案:3次装箱

    用“+”连接字符串时,内部会调用string.Concat(),重载很多,此处调用的是string.Concat(new object[]),所以n,d都发生了一次装箱

  • 相关阅读:
    [dubbo实战] dubbo+zookeeper伪集群搭建
    Spring中使用Map、Set、List、数组、属性集合的注入方法配置文件
    Docker实践
    docke镜像上传到dockerhub仓库和阿里云docker仓库的方法
    Linux chmod命令详解
    使用nexus搭建maven私服
    Zookeeper注册节点的掉线自动重新注册及测试方法
    Dubbo负载均衡策略
    各种排序算法及其java程序实现
    java中的各种数据类型在内存中存储的方式
  • 原文地址:https://www.cnblogs.com/xiaonangua/p/7298089.html
Copyright © 2011-2022 走看看