我是Java的新手。我最近才知道我们可以初始化相同的原始数据类型,如下所示:
Object name="Surendra";
Object age=27;
代替
String name="Surendra";
int age=27;
这两个定义有什么区别,我们为什么/何时应该使用哪一个?
另外,当我们应该int原始数据类型和Integer包装类时。
如果您可以用外行的方式解释它,请欣赏它。
我是Java的新手。我最近才知道我们可以初始化相同的原始数据类型,如下所示:
Object name="Surendra";
Object age=27;
代替
String name="Surendra";
int age=27;
这两个定义有什么区别,我们为什么/何时应该使用哪一个?
另外,当我们应该int原始数据类型和Integer包装类时。
如果您可以用外行的方式解释它,请欣赏它。
当你这样做时:
Object name = "Surendra";
Object age = 27; // Actually Integer here, not int
你正在铸造Stringand Integerto Object,这完全安全,因为String当然是 a Object,所以也是Integer。但是,下面的代码不会编译,因为即使name存储了一个String,java 编译器也不知道它。编译器搜索类中调用的方法trim,Object但一无所获,因此拒绝编译。对于age.
name.trim(); // Won't compile
age.longValue(); // Won't compile
何时使用Object?当您也不知道类型时。例如:
public static void foo(Object o) {
if (o instanceof String) {
String s = (String) o;
// ...
}
if (o instanceof Integer) {
Integer i = (Integer) o;
// ...
}
}
您可以进行instanceof检查并确定要执行的操作。
谈到Integerand int,它们是完全不同的。Integer是一个Object,但int不是。int是原始类型。您通过装箱转换int为并通过拆箱转换为。现代 Java 编译器将为您进行装箱或拆箱。您主要用作泛型类型参数,例如. 您不能在 java 中使用,因为类型参数必须是. 有时你也可以在你想成为一个有效值的时候使用。请注意,当 java 对 执行自动拆箱时,它会抛出一个. 意识到。IntegerIntegerintIntegerList<Integer>List<int>ObjectIntegernullnullNullPointerException
// These 2 are identical
Integer o1 = 0; // Auto boxing
Integer o2 = Integer.valueOf(0); // Boxing
// These 2 are identical
int i1 = o1; // Auto unboxing
int i2 = o2.intValue(); // Unboxing
Integer o3 = null; // Works
int i3 = null; // Won't compile