java中原始数据类型跟封装数据类型的用法如:double和Double的用法
java中原始数据类型和封装数据类型的用法如:double和Double的用法
java中提供原始数据类型,和封装数据类型(double和Double),求高手赐教什么时候该用double 什么时候该用Double,我知道double 是存储在栈中,而Double 是存储在堆中。最好是能从堆栈的角度解答什么情况下应该用double,什么情况下用Double,感激不敬。
------解决方案--------------------
我不是高手,不过尝试着说下吧,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));
}
}
明白了吧?
------解决方案--------------------
对头 就是这样 这是编译期优化
------解决方案--------------------
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));
}
}
明白了吧?
------解决方案--------------------
对头 就是这样 这是编译期优化
------解决方案--------------------