为什么我们不能将整数对象转换为字符串对象?请详细解释。
Integer obj = new Integer(10);
System.out.println((String)obj);
这里有协变返回类型吗?
答案 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是一种强类型编程语言,因为必须先使用数据类型声明每个变量,然后才能使用它。一旦声明,变量的数据类型就不会改变。
请参阅以下内容: