我可以知道为什么你可以使用(String)代替.toString()?反之亦然,对于数字也可以使用包装类,那么为什么我们需要一个(双)?等
答案 0 :(得分:9)
因为它们是不同的东西。
Integer i = Integer.valueOf("0");
String zero1 = i.toString(); // WORKS
String zero2 = (String) i; // FAILS
toString()
方法是每个对象获取对象的字符串表示的方法。
当你知道对象的类型是什么时使用了Casting,但它当前被称为超类型。
答案 1 :(得分:4)
(String)
是类强制转换,仅当对象实际上属于您要转换的类型时才有效(包括子类 - 但String
为{{1}在这种情况下,可以没有子类)。如果对象的类型不是预期的,则会失败并显示final
。强制转换不会创建新对象,也不会更改原始对象,只会为您提供不同类型的引用。
OTOH,ClassCastException
是一个(潜在的)转换,它是为所有对象定义的,因此总是产生结果(当然,在空指针上调用时除外)。我写了潜力,因为toString()
显然没有转换。在其他情况下,转换通常通常会创建一个新对象(在我们的示例中为String
),而可能甚至可以修改原始对象的内部状态(例如,如果是缓存转换的结果 - 尽管外部世界不应该看到这种差异。)
答案 2 :(得分:3)
(String) obj
表示:obj
是String
的一个实例,我想要这种类型的引用。
toString()
是所有Object
实施的常规方法。
答案 3 :(得分:3)
类型转换,包装类和toString()完全不同。
基本上,类型转换是将一个实体更改为具有不同数据类型的另一个实体的过程。意味着您只需更改实体的数据类型即可。
包装类用于从现有类型对象创建类型的对象。
.toString()是Object中定义的方法,此方法主要用于以String格式表示您的对象。您可以覆盖此方法以任何字符串格式表示对象。
答案 4 :(得分:0)
转换为String
与在任意对象上调用.toString()
不同。
请注意,转换根本不进行任何类型的转换:转换只不过给编译器一个提示“看,我知道这个对象是String
,所以我希望你把它当成一个String
”。如果在运行时,对象实际上不是String
,那么您将获得ClassCastException
。
答案 5 :(得分:0)
double,int,float是原始类型,它们不是对象。你不能做int.toString。
但是Double和Integer是可以从中创建对象的类,然后调用它们的方法,例如Integer.toString()。
答案 6 :(得分:0)
toString()
是一个已在Object
类中定义的方法,Java中的所有对象都隐式扩展。它用于System.out.println()
。在某些情况下,您需要覆盖它,假设您有一个这样的对象,并希望使用System.out.println()
自动打印出来
class Person {
private String name;
private int age;
Person(String name, int age){ .....}
@Override
public String toString(){
return name + " " + age;
}
}
Person p = new Person("Bill", 24);
System.out.println(p);
关于(string)
强制转换,你可以只使用一些包装器和原语,对于像上面这样的情况几乎没用。