java中原始数据类型和封装数据类型的用法如:double和Double的用法

backbasepoint 2013-02-25 09:54:20
java中提供原始数据类型,和封装数据类型(double和Double),求高手赐教什么时候该用double 什么时候该用Double,我知道double 是存储在栈中,而Double 是存储在堆中。最好是能从堆栈的角度解答什么情况下应该用double,什么情况下用Double,感激不敬。
...全文
1349 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
架构师梦 2013-03-05
  • 打赏
  • 举报
回复
如果有额外的需要就用Double 比如在存储在集合中、或者需要调用包装类的一些方法什么的。 但是JDK1.5就有装箱和拆箱的功能, 比如: double a = 2; List list = new ArrayList(); list.add(a); // 这里会把double自动转换成Double类型
失落夏天 2013-03-05
  • 打赏
  • 举报
回复
引用 楼主 backbasepoint 的回复:
java中提供原始数据类型,和封装数据类型(double和Double),求高手赐教什么时候该用double 什么时候该用Double,我知道double 是存储在栈中,而Double 是存储在堆中。最好是能从堆栈的角度解答什么情况下应该用double,什么情况下用Double,感激不敬。 jajva ……
jdk1.4之后感觉就没有啥不同了。。
strivehard 2013-03-05
  • 打赏
  • 举报
回复
引用 8 楼 backbasepoint 的回复:
引用 7 楼 strivehard 的回复: java是有编译器优化的 有个语法糖 编译器会进行一个优化,,, 语法糖,学习了。 这么说来 其实我纠结的这个问题最终并不影响性能,因为变异为class 文件的后都会强转,是我这样理解吗? 谢谢。
对头 就是这样 这是编译期优化
蜀南真人 2013-03-05
  • 打赏
  • 举报
回复
个人觉得,从堆与栈角度来讲实际意义不大,要看业务需要,有些需要以效率和速度第一设计,只有用double,有些则不是。
backbasepoint 2013-02-27
  • 打赏
  • 举报
回复
引用 7 楼 strivehard 的回复:
java是有编译器优化的 有个语法糖 编译器会进行一个优化,,,
语法糖,学习了。 这么说来 其实我纠结的这个问题最终并不影响性能,因为变异为class 文件的后都会强转,是我这样理解吗? 谢谢。
strivehard 2013-02-27
  • 打赏
  • 举报
回复
引用 6 楼 backbasepoint 的回复:
引用 5 楼 strivehard 的回复: 呵呵 堆里只放数组和对象实例 栈里只放基本类型 double数据基本类型 能放到堆里吗? 所以只能用Double喽 1、按照这种说法当向集合中添加一个double类型的数据,最终会自动转换为Double类型存储对吗? 2、比如一个学生实体 student(){int id;//编号 double age; //年龄} 如果ne……
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)); } } 明白了吧?
  • 打赏
  • 举报
回复
拆箱和装箱。
woshiliubei3 2013-02-26
  • 打赏
  • 举报
回复
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
backbasepoint 2013-02-26
  • 打赏
  • 举报
回复
引用 5 楼 strivehard 的回复:
呵呵 堆里只放数组和对象实例 栈里只放基本类型 double数据基本类型 能放到堆里吗? 所以只能用Double喽
1、按照这种说法当向集合中添加一个double类型的数据,最终会自动转换为Double类型存储对吗? 2、比如一个学生实体 student(){int id;//编号 double age; //年龄} 如果new一个这样的学生对象stu, stu存在堆中,问题是stu中的字段 id 和 age 会保存在栈中呢(因为是原始类型)?还是会自动转换为对象类型(Integer、Double)然后保存到堆中? 3、听说方法的参数是保存在栈中、而对象保存在堆中;那么一个方法的参数 是一个对象,那么该参数是保存在堆中,还是在栈中呢? 小弟 愚昧,谢谢赐教。
strivehard 2013-02-26
  • 打赏
  • 举报
回复
引用 4 楼 backbasepoint 的回复:
引用 1 楼 ngl8520 的回复: 比如想将double数据存储到集合中的时候,就用的是double的数据包装类,而不能是double. 关键 是为什么存储到集合中的是候要用Double而不用double? 求赐教。
呵呵 堆里只放数组和对象实例 栈里只放基本类型 double数据基本类型 能放到堆里吗? 所以只能用Double喽
backbasepoint 2013-02-26
  • 打赏
  • 举报
回复
引用 1 楼 ngl8520 的回复:
比如想将double数据存储到集合中的时候,就用的是double的数据包装类,而不能是double.
关键 是为什么存储到集合中的是候要用Double而不用double? 求赐教。
ngl8520 2013-02-25
  • 打赏
  • 举报
回复
我不是高手,不过尝试着说下吧,double是java的基本类型数据,Double就如你所说是double的数据包装类,也就是说Double是一个类可以创建对象,至于它们都什么时候用,就要看情况了吧。需要用到对象的时候就只能用Double,比如想将double数据存储到集合中的时候,就用的是double的数据包装类,而不能是double.

51,410

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧