如果有额外的需要就用Double
比如在存储在集合中、或者需要调用包装类的一些方法什么的。
但是JDK1.5就有装箱和拆箱的功能,
比如:
double a = 2;
List list = new ArrayList();
list.add(a); // 这里会把double自动转换成Double类型
java是有编译器优化的 有个语法糖 编译器会进行一个优化,,,
泛型、装包/拆包 都是编译的时候实现的,比如泛型
List<User> userList = new ArrayList<User>();
User user = userList.get(0);
调用get不用强制转换。其实是java编译器语法糖对他进行了修改
ArrayList内部的get方法被加入了强转
比如
public class ArrayList {
public User get(int index){
return (User)list[index];
}
}
此处只是举个例子,,,,
关于double加入List放到哪
double会自动装包成Double类型 举个例子 如下代码
public class Client {
public static void main(String[] args) {
double i = 1999999999;
List list = new ArrayList();
list.add(i);
}
}
编译后 在用工具反编译 如下
public class Client
{
public static void main(String[] args)
{
double i = 1999999999.0D;
List list = new ArrayList();
list.add(Double.valueOf(i));
}
}
明白了吧?
double是基本数据类型,Double是原始数据类型
double没有方法,Double有自己的属性和方法
double只创建引用,Double创建对象
集合类不能存放double,只能存放Double
double存放在栈中,Double存放在堆中
栈的存取速度要高于堆,另外栈中的数据可以共享
如:
double a = 0;
double b = 0;
不会创建对象,只会建立两个引用,同时指向变量“0”(栈数据共享)
而
Double a = new Double(0);
Double b = new Double(0);
会创建两个对象,即使对象所代表的值一样(堆数据不共享)
所以从效率来讲用double合适,而Double提供的属性和方法会使操作各种操作更加方便和灵活
参考资料http://hi.baidu.com/wunla/item/5c39e0c326909459ac00ef54