A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

什么是装箱和拆箱?什么是重载?怎么转换?书面的回答!

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

8 个回复

倒序浏览
将一个基本数据类型变为包装类,这样的过程就是装箱。而将一个包装类变成基本数据类型的过程就是拆箱。
重载就是方法名称相同。但是参数的类型和参数的个数不同。
在jdk1.5之后就提供了自动装箱和拆箱操作。

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
装箱就是把值类型转成引用类型,拆箱相反把引用转换成值类型。
重载就是指一个方法名同,参数个数不同,返回值可以相同的方法。

重载,是指允许存在许多个同名函数,而这些函数的参数不同。重载的实现是:编译器根据函数的不同的参数表,对同名函数的名称做修饰,对于编译器而言,这些同名函数就成了不同的函数,他们的调用地址在编译期就绑定了。

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
装箱就是把基础类型封装成一个类。比如把int封装成Integer,这时你就不能把他当成一个数了,而是一个类了,对他的操作就需要用它的方法了。拆箱就是把类转换成基础类型。比如你算个加法什么的是不能用类的,就得把它转换成基本类型。
重载:在同一个类中,允许存在一个以上的同名函数,只要参数个数或者参数类型不同就行,
   好处就是方便阅读,优化程序设计。
//JDK1.5之后可自动进行的装箱和拆箱的操作,比较方便
public class IntegerDemo02{       
public static void main (String []agrs)       
{               
                 int i=10;       
        Integer j=i;       
        int k=j;       
        System.out.println(++k);       
}
}; //output:11

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
装箱: 将值类型转换为引用类型的过程
拆箱:将引用类型转换为值类型的过程
装箱和拆箱都是在父类和子类的基础上
也就是显示转换和隐式转换

int n=10;
object o=n;//装箱
int m=(int)o;//拆箱
Console.WriteLine(m);

//由于Int32是结构,结构是值类型
由于Int32还是实现了Icomparable接口,接口是引用类型
Int32到Icomparable 发生了装箱,Icomparable到Int32发生了拆箱//
int n1=10;
Icomparable com=n1;//装箱
int m=(int)com;//拆箱

string s1="a";
string s2="b";
int s3=10;
double s4=1.0;
string.Concat(s1,s2,s3,s4); //Concat里面参数是object ,object是引用类型,string是引用类型,int,double 是值类型,所以发生两次装箱。

重载就是方法重名,但是参数个数和参数类型不同

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
装箱和拆箱:是把值类型转换为引用类型的过程,是隐式的,相反的过程就是拆箱,是显式的。
回复 使用道具 举报
装箱:是把值类型转换为引用类型 int a=1; object o= a;
拆箱:是把引用类型转化为值类型  object a=1; int b=(int)a;
重载:同方法名,不同参数 如:  int max(int a,int b){ XXXX }  double max(double a,double b){ XXXX}
回复 使用道具 举报
基本数据类型的自动装箱、拆箱是自JDK 1.5开始提供的功能。在面向对象的语言中,万物皆对象,然而基本数据类型却不是对象,但是操作对象比操作基本数据更加的方便。因此经常需要将基本数据类型转换为对象。
    然而在在JDK 1.5之前,要使用打包类型才能将基本数据类型包装为对象。例如:使用以下语句才能将int包装为一个Integer对象:Integer integer = new Integer(10);
    在JDK 1.5之后提供了自动装箱的功能,可以直接使用以下语句来打包基本数据类型:Integer integer = 10;在进行编译时,编译器再自动根据我们写下的语句,判断是否进行自动装箱动作。在上例中integer参考的会是Integer类的实例。同样的动作可以适用于 boolean、byte、short、char、long、float、double等基本数据类型,分别会使用对应的打包类型Boolean、Byte、Short、Character、Long、Float或Double。

下面的程序就使用了自动装箱功能。
    public class AutoBoxDemo {
        public static void main(String[] args) {
            Integer data1 = 10;
            Integer data2 = 20;           
            // 转为double值再除以3
            System.out.println(data1.doubleValue() / 3);
            // 进行两个值的比较
            System.out.println(data1.compareTo(data2));
        }
    }
程序看来简洁了许多,data1与data2在运行时就是Integer的实例,可以直接进行对象操作。执行的结果如下:
    3.3333333333333335
    –1
    自动装箱运用的方法还可以如下:
    int i = 10;
    Integer integer = i;

    也可以使用更一般化的java.lang.Number类来自动装箱。例如:
    Number number = 3.14f;

    3.14f会先被自动装箱为Float,然后指定给number。

    从JDK 1.5开始可以自动装箱,也可以自动拆箱,也就是将对象中的基本数据形态信息从对象中自动取出。例如下面这样写是可以的:
    Integer fooInteger = 10;
    int fooPrimitive = fooInteger;

    fooInteger引用至自动装箱为Integer的实例后,如果被指定给一个int类型的变量fooPrimitive,则会自动变为int类型再指定给fooPrimitive。在运算时,也可以进行自动装箱与拆箱。例如:
    Integer i = 10;
    System.out.println(i + 10);
    System.out.println(i++);

    上例中会显示20与10,编译器会自动进行自动装箱与拆箱,也就是10会先被装箱,然后在i + 10时会先拆箱,进行加法运算;i++该行也是先拆箱再进行递增运算。再来看一个例子:
    Boolean boo = true;
    System.out.println(boo && false);

    同样的boo原来是Boolean的实例,在进行AND运算时,会先将boo拆箱,再与false进行AND运算,结果会显示false。
回复 使用道具 举报
函数重载就是一个在一个程序中可以使用相同的函数名去实现相似的功能。函数重载只要记住以下几点就可:1.重载的函数的函数名必须一模一样;2重载的函数的参数列表必须不同,参数列表不同包括参数的个数,类型,以及参数的顺序不同;3重载的函数的返回值可以相同也可以不同;
例如以下函数均是函数的重载
int sort(int a);
int sort(float a);\\与第一个函数参数类型不同
int sort(int a ,int b);\\与第一、二个函数参数个数不同,
int sort(int a ,float b);\\与第一、二个函数参数个数不同,与第三个函数的第二个参数类型不同
.....
而下面的函数与上面的函数却不能构成重载,因为它们只是函数的返回值不同而相应的参数列表相同
void sort(int a);
void sort(float a);
void sort(int a ,int b);
void sort(int a ,float b);

如有不妥之处请指正,大家一起学习,一起进步,朝着黑马的大门不断前进!谢谢!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马