2017-04-05 71 views
5

我在网上搜索了它,但所有的答案只是差异。我知道不同之处,但我不了解他们的应用程序的差异。例如,假设我们必须采用两个浮点值,如果我们使用double,则可以使用a==b轻松进行比较,而如果使用Double,则必须使用a.equals(b)原始数据类型和包装数据类型的用法有什么区别,以及包装数据类型的需要是什么?

+2

希望上漂浮在''==比较仅仅是一个例子:) http://stackoverflow.com/questions/1088216/whats-wrong-with-using-to-compare-floats-in-java – jensgram

回答

3

幕后还有更多。其中一个原因是集合API是如何在Java开发...

想想看,你就不能做到像什么:

List<int> myList 
在Java中

。您将需要该包装

List<Integer> myList 

,因为集合与对象,而不是基元工作。

在另一方面,包装是对象,提供开发者一个很好的组方法/常​​数,使“更快,更简单”的一些操作,例如:

int x = 17; 

现在,由于你可以做包装:

String pars= Integer.toBinaryString(x); 
pars= Integer.toHexString(x); 
Integer.MAX_VALUE; 
Integer.highestOneBit(x); 

如果没有,你会得到在颈部疼痛,因为原始x已经没有多少有助于你做到这一点。

+0

在注意,这里有一些“Primitive Collections for Java”的实现:http://pcj.sourceforge.net –

2

当您使用Collections时,您必须使用对象而不是基元。

List<double> list = new ArrayList<double>; // not allowed 
List<Double> list = new ArrayList<Double>; // allowed 
Map<double, String> map = new HashMap<double, String>(); // not allowed 
Map<Double, String> map = new HashMap<Double, String>(); // allowed 

或者如果你想让你的Double可以为空。可用于例如与Hibernate的实体和DTO or POJO

private int number; // default: 0 
private Integer number; // default: null 

Double允许你做快速投

double.intValue(); 
double.toString(); 
6

你可以找到它blog

1.首先

Double是引用类型,因此您可以将其用作模板arg ument

例如:

public class Tmp<T> { 
    public Tmp() { 
    } 
} 

如果你想创建这样一个类。

然后你必须通过引用类型,同时创建in的对象。 例如

new Tmp<Integer>() 

如果你创建了对象,你会得到一个错误:

new Tmp<int>() 

2.第二

因为包装类只有它是可以做到的通用数据类型的编程。

例如波纹管方法接受任何类型的数字(Byte, Integer, Double, Short, Float, Long, BigDecimal, BigInteger, AtomicInteger, AtomicLong)并返回Integer加上该数字。

public Integer add(Number a, Number b){ 
    return a.intValue() + b.intValue(); 
} 

3.第三

在Java的早期版本是不支持自动装箱和AutoUnboxing。 因此,如果您使用该版本的Java,那么您可以轻松区分两者。

例如,如果您使用Java 1.4或更早随后版本:

Integer a = 1; // Auto Boxing(Not Works) 
Integer a2 = new Integer(2); // Boxing (It Works) 

4.第四

两者的储存也是不同的原始类型存储在Stack而引用类型是在商店Heap

5.第五

您可以使用该类的功能,如将字符串解析为整数,双精度等,并使用相同的同意。

这里是Integer

enter image description here

6的功能,并同意第六

可以序列Integer而这是不可能的int

7.第七

您可以通过Integer为RMI方法,但同样是不可能的int

注:它们存储在intInteger类里面其实RMI说法另一个对象的两个Integerint可兼职。

8.第八

int变是可变的(这是不与final int的情况下),而Integer是不可变的。当我们改变这个值的时候它会创建一个新的对象。

相关问题