java中原始数据类型和封装数据类型的用法如:double和Double的用法 java中提供原始数据类型,和封装数据类型(double和Double),求高手赐教什么时候该用double 什么时候该用Double,我知道double 是存储在栈中,而Double 是存储在堆中。最好是能从堆栈的角度解答什么情况下应该用double,什么情况下用Double,感激不敬。 jajva 存储 堆栈 数据类型 [解决办法] 我不是高手,不过尝试着说下吧,double是java的基本类型数据,Double就如你所说是double的数据包装类,也就是说Double是一个类可以创建对象,至于它们都什么时候用,就要看情况了吧。需要用到对象的时候就只能用Double,比如想将double数据存储到集合中的时候,就用的是double的数据包装类,而不能是double. [解决办法] 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 [解决办法] 拆箱和装箱。 [解决办法]
呵呵 堆里只放数组和对象实例
栈里只放基本类型 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)); } }
明白了吧? [解决办法]
对头 就是这样 这是编译期优化 ------解决方案--------------------
jdk1.4之后感觉就没有啥不同了。。 [解决办法] 如果有额外的需要就用Double 比如在存储在集合中、或者需要调用包装类的一些方法什么的。 但是JDK1.5就有装箱和拆箱的功能, 比如: double a = 2; List list = new ArrayList(); list.add(a); // 这里会把double自动转换成Double类型 [解决办法] 个人觉得,从堆与栈角度来讲实际意义不大,要看业务需要,有些需要以效率和速度第一设计,只有用double,有些则不是。