为什么我们不能将整数对象转换为字符串对象?

时间:2011-09-20 02:25:11

标签: java

为什么我们不能将整数对象转换为字符串对象?请详细解释。

Integer obj = new Integer(10);
System.out.println((String)obj);

这里有协变返回类型吗?

6 个答案:

答案 0 :(得分:5)

您无法将Integer转换为String,因为它们不相关。您只能将引用转换为其超类之一,即:向上转换,在这种情况下不需要转换运算符,或其子类(向下转换)。

Integer既不是String的子类也不是超类,所以你不能这样做。如果你被允许随意地将一个对象转换为你想要的任何类型,为什么还要打扰类型?

所有Java对象都有一个.toString()方法(继承自Object),所以您只需要String s = obj.toString(),System.out.println()会自动为您调用。

不,这与协变返回类型没有任何关系。

答案 1 :(得分:1)

您不能这样做,因为整数对象不是string类型。或者,您可以在整数obj(obj.toString())上调用toString()方法,因为toString()方法在对象类中定义,而integer是对象类的子类。

答案 2 :(得分:1)

您实际上不需要强制转换String。这样可以正常工作:

Integer obj = new Integer(10); System.out.println(obj);

在这段代码中,java显式调用了所有对象都可用的toString()方法,这就是它工作的原因。如果您实际拥有该对象的实例,则只能转换和对象。所以,如果你有这个代码:

Object s = "A String";

您可以将其强制转换为字符串:

System.out.println((String) s);

但是,如果你有:

Object o = new SomeObject();

你只能回到SomeObject或SomeObject扩展的类型。

对于您的示例,

协变返回类型不在此处。但是,如果允许使用协变返回类型覆盖方法,则还可以双向转换。所以,如果你有一个方法:

public A doSomething();

你在子类中将其覆盖为:

public B doSomething();

始终可以成功执行以下任一操作:

(A) doSomething();
(B) doSomething();

答案 3 :(得分:1)

该演员表不起作用,因为它不是is a种关系。例如。你不能把汽车的物体与车辆的物体一起投射,而不能投射到水果上。我希望能给你一些想法。 总之,整数不是字符串。

答案 4 :(得分:0)

因为它们是不同的对象类型,并且Java语言不允许跨两种不同的对象类型进行转换(当然除非它们被继承) - 我不确定你还需要详细说明什么。您可以使用Integer.toString()来 stringify 您的Integer对象。

答案 5 :(得分:0)

String提供转换其他对象的方法。

Integer obj = new Integer(10); 
String stringWasInt = String.valueOf(obj);
System.out.println(stringWasInt );

Java是一种强类型编程语言,因为必须先使用数据类型声明每个变量,然后才能使用它。一旦声明,变量的数据类型就不会改变。

请参阅以下内容:

Types, Values, and Variables

Strong typing