我在网上搜索了所有内容,但所有答案都只是差异所在。我知道不同之处,但我不明白他们的应用程序的差异。
例如,假设我们必须使用两个浮点值,如果我们使用double,我们可以使用a==b
轻松比较,而如果我们使用Double,则必须使用a.equals(b)
。
答案 0 :(得分:6)
您可以在blog
上找到它<强> 1。第一强>
Double是引用类型,因此您可以将其用作模板参数
例如:
public class Tmp<T> {
public Tmp() {
}
}
如果你想创建一个类似的那个。
然后你必须传递引用类型,同时创建in的对象。 例如
new Tmp<Integer>()
如果您创建对象,则会出现错误:
new Tmp<int>()
<强> 2。第二强>
只有因为Wrapper类才可以进行通用数据类型编程。
例如,bellow方法接受任何类型的数字(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不支持AutoBoxing和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,Double等,并使用相同的同意。
以下是Integer
class
<强> 6。第六强>
您可以使用Integer
int
<强> 7。第七强>
您可以将Integer
作为RMI方法传递,但int
注意:Integer
和int
都可以成为RMI参数中另一个对象的一部分,实际上它们在Integer
类中存储了int
中的值。
<强> 8。第八强>
int
的变量是可变的(final int
不是这种情况),而Integer
是不可变的。当我们更改值时,它将创建新对象。
答案 1 :(得分:3)
幕后还有更多内容。其中一个原因是如何使用Java开发Collections API ...
考虑到你不能做任何事情:
List<int> myList
在Java中。您将需要该
的包装器List<Integer> myList
因为集合使用对象而不是基元。
另一方面,包装器是为开发人员提供一组很好的方法/常量的对象,这些方法/常量使得“更快更容易”#34;一些操作如:
int x = 17;
现在,感谢你可以做的包装:
String pars= Integer.toBinaryString(x);
pars= Integer.toHexString(x);
Integer.MAX_VALUE;
Integer.highestOneBit(x);
如果没有这个,你会感到颈部疼痛,因为原始x
对你没有多大帮助。
答案 2 :(得分: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();