java 中Integer 类型为什么能相加?

来源:百度知道 编辑:UC知道 时间:2024/05/22 19:28:19
public class test
{
public static void main(String[] args)
{

Integer a=new Integer(12);
Integer b=new Integer(78);
System.out.println(a+b);
}
}
a和b都不是基本类型,却能相加,这是怎么实现的?
如果要自己写两个可以相加的类应该怎么办?

刚刚在另一个问题中提到这一点 jdk1.5的新特性 自动装箱和拆箱
也就是 包装类和它包装的简单类型 可以自由转换
以前我们实现这个例子时必须做的是
int a1 = a.intValue();
int b1 = b.intValue();
System.out.println(a1 + b1);
而有了新特性 就不那么多转化了 jvm就帮我们做这些事

Integer x=new Integer(2323);
这个构造方法没错,但
System.out.pringln(a+b);这里a和b不能直接相加,Integer是对int类型的包装,用于将其他的类型值转变为int型的,如int x=Integer.parseInt("12345");括号里面的值“12345”为字符串。还有其他基本数据类型的包装,如:Double,Float,String,等。

基本数据类型:byte,int, short, long, boolean,char, float,double等
包装类型 : Byte,Integer,Short,Long,Boolean,Character,Float,Double等
JDK1.5的新特性:自动装包/拆包(Autoboxing/unboxing)
  自动装包/拆包大大方便了基本类型数据和它们包装类地使用。
  自动装包:基本类型自动转为包装类.(int >> Integer)
  自动拆包:包装类自动转为基本类型.(Integer >> int)
  在JDK1.5之前,我们总是对集合不能存放基本类型而耿耿于怀,现在自动转换机制
解决了我们的问题。
int a = 3;
Collection c = new ArrayList();
c.add(a);//自动转换成Integer.
Integer b = new Integer(2);
c.add(b + 2);
  这里Integer先自动转换为int进行加法运算,然后int再次转