原始数据类型和包装数据类型的用法有何不同,包装数据类型的需求是什么?
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 等,并使用相同的同意。
以下是Integer
class
的职能和同意
6.第六
您可以序列化 Integer
,而 int
则不可能
7.第七
您可以将 Integer
作为 RMI 方法传递,但使用 int
是不可能的
注意:Integer
和 int
都可以是 RMI 参数中另一个对象的一部分,实际上在 Integer
class 中它们将值存储在 int
.
8.第八名
int
的变量是可变的(final int
不是这种情况)而 Integer
是不可变的。当我们更改值时它将创建新对象。
我在网上搜索了所有的答案,但所有的答案都是不同的。我知道其中的区别,但我不了解它们在应用程序中的区别。
例如,假设我们要取两个浮点值,如果我们使用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 等,并使用相同的同意。
以下是Integer
class
6.第六
您可以序列化 Integer
,而 int
7.第七
您可以将 Integer
作为 RMI 方法传递,但使用 int
注意:Integer
和 int
都可以是 RMI 参数中另一个对象的一部分,实际上在 Integer
class 中它们将值存储在 int
.
8.第八名
int
的变量是可变的(final int
不是这种情况)而 Integer
是不可变的。当我们更改值时它将创建新对象。