原始数据类型和包装数据类型的用法有何不同,包装数据类型的需求是什么?

What is the difference in usage of primitive and wrapper data type and what is the need of wrapper data type?

我在网上搜索了所有的答案,但所有的答案都是不同的。我知道其中的区别,但我不了解它们在应用程序中的区别。

例如,假设我们要取两个浮点值,如果我们使用double,我们可以很容易地使用a==b进行比较,而如果我们使用Double,我们将不得不使用a.equals(b)

幕后的事情远不止这些。原因之一是集合 API 是如何在 Java...

中开发的

考虑到你不能做类似的事情:

List<int> myList 

在 Java。您将需要包装器

List<Integer> myList 

因为集合使用对象而不是基元。

另一方面,包装器是为开发人员提供一组很好的 methods/constants 的对象,它们使 "faster and easier" 一些操作如:

int x = 17;

现在,感谢包装器,您可以:

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

没有它你会感到脖子痛,因为原始的 x 对你没有太大帮助。

当您使用 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's entities and with DTO or POJO

很有用
private int number; // default: 0
private Integer number; // default: null

Double 允许你进行快速施法

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

您可以在 blog

上找到它

1.第一

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

例如:

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

如果你想创建一个像那样的 class。

那么你必须传递引用类型,同时创建in的对象。 例如

new Tmp<Integer>()

如果你创建像这样的对象,你会得到一个错误:

new Tmp<int>()

2。第二

只有 Wrapper classes 才有可能进行通用数据类型编程。

例如下面的方法接受任何类型的数字 (Byte, Integer, Double, Short, Float, Long, BigDecimal, BigInteger, AtomicInteger, AtomicLong) 和 return 该数字的 Integer 相加。

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

3。第三

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

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

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

4.第四

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

5.第五

您可以使用 class 的功能,例如将字符串解析为 Integer、Double 等,并使用相同的同意。

以下是Integerclass

的职能和同意

6.第六

您可以序列化 Integer,而 int

则不可能

7.第七

您可以将 Integer 作为 RMI 方法传递,但使用 int

是不可能的

注意:Integerint 都可以是 RMI 参数中另一个对象的一部分,实际上在 Integer class 中它们将值存储在 int.

8.第八名

int 的变量是可变的(final int 不是这种情况)而 Integer 是不可变的。当我们更改值时它将创建新对象。