java double 和Double的区别 及hashCode的应用

来源:互联网 发布:js获取自定义属性 编辑:程序博客网 时间:2024/06/10 09:19

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提供的属性和方法会使操作各种操作更加方便和灵活
例如:

package inheritance;import java.time.*;/** * * @author cmx */public class hashCode {    public static void main(String[] args)    {        /**         * hashCode对象的test         */        String n="hello";        double salary=12.0;        Double salary1=new Double(salary);  //有这个就可以运行        LocalDate hireDay= LocalDate.now();  //而不是 LocalDate hireDay=new LocalDate();        System.out.println(n.hashCode());        System.out.println(salary1.hashCode());        System.out.println(hireDay.hashCode());    }}

对比与以下就不可以运行

package inheritance;import java.time.*;/** * * @author cmx */public class hashCode {    public static void main(String[] args)    {        /**         * hashCode对象的test         */        String n="hello";        double salary=12.0;     //   Double salary1=new Double(salary);  注意        LocalDate hireDay= LocalDate.now();  //而不是 LocalDate hireDay=new LocalDate();        System.out.println(n.hashCode());        System.out.println(salary.hashCode());  //注意salary而不是salary1        System.out.println(hireDay.hashCode());    }}

区别在于:double salary; 中salary不是对象
而Double salary1=new Double(salary);构造了一个对象
hashCode只能做用于对象
将double类型的数值的hashCode方法,除了将double转为Double,还可以采用以下方法:
Double.hashCode(double value)
例如:

package inheritance;import java.time.*;/** * * @author cmx */public class hashCode {    public static void main(String[] args)    {       /**        * Double.hashCode        */        double salary=12.0;        System.out.println(Double.hashCode(salary));        /**         * run:1076363264成功构建 (总时间: 0 秒)         */    }}
原创粉丝点击