原语和包装器数据类型的使用有什么不同以及包装器数据类型的需求是什么?

Bug*_*ggy 5 java primitive wrapper

我在网上搜遍了所有的答案,但所有答案都只是差异所在.我知道不同之处,但我不明白他们的应用程序的差异.

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

Sun*_*zar 6

你可以在博客上找到它

1.首先

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

例如 :

public class Tmp<T> {
    public Tmp() {
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你想创建一个像那样的类.

然后你必须传递引用类型,同时创建in的对象.例如

new Tmp<Integer>()
Run Code Online (Sandbox Code Playgroud)

如果您创建对象,您将收到错误:

new Tmp<int>()
Run Code Online (Sandbox Code Playgroud)

2.第二

只有因为Wrapper类才可以进行通用数据类型编程.

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

public Integer add(Number a, Number b){
    return a.intValue() + b.intValue();
}
Run Code Online (Sandbox Code Playgroud)

3.第三

早期版本的Java不支持AutoBoxing和AutoUnboxing.因此,如果您使用该版本的Java,那么您可以轻松区分这两者.

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

Integer a = 1; // Auto Boxing(Not Works)
Integer a2 = new Integer(2); // Boxing (It Works)
Run Code Online (Sandbox Code Playgroud)

第四

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

5.第五

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

以下是Integer课程的功能和同意

在此输入图像描述

6.第六

您可以Integer在无法进行序列化时进行序列化int

7.第七

您可以Integer作为RMI方法传递,但同样不可能int

注意:两个Integerint可在实际上里面RMI说法另一个对象的一部分,Integer它们存储在值类int.

8.第八

变量int是可变的(事实并非如此final int),而变量Integer是不可变的.当我们更改值时,它将创建新对象.