-3

我是Java的新手。我最近才知道我们可以初始化相同的原始数据类型,如下所示:

Object name="Surendra";
Object age=27;

代替

String name="Surendra";
int age=27;

这两个定义有什么区别,我们为什么/何时应该使用哪一个?

另外,当我们应该int原始数据类型和Integer包装类时。

如果您可以用外行的方式解释它,请欣赏它。

4

1 回答 1

0

当你这样做时:

Object name = "Surendra";
Object age = 27;  // Actually Integer here, not int

你正在铸造Stringand Integerto Object,这完全安全,因为String当然是 a Object,所以也是Integer。但是,下面的代码不会编译,因为即使name存储了一个String,java 编译器也不知道它。编译器搜索类中调用的方法trimObject但一无所获,因此拒绝编译。对于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
于 2021-10-16T10:13:54.197 回答