Java (字符串)和.toString以及其他类型转换为什么需要它?

Java (字符串)和.toString以及其他类型转换为什么需要它?,java,Java,我可以知道为什么可以使用(String)来代替.toString()吗?反之亦然,对于数字也可以使用包装类的,那么为什么我们需要一个(double)?等等,因为它们是不同的东西 Integer i = Integer.valueOf("0"); String zero1 = i.toString(); // WORKS String zero2 = (String) i; // FAILS toString()方法是每个对象获取对象的字符串表示形式的方法 当您知道对象的类型时,可以使用强制转换

我可以知道为什么可以使用(String)来代替.toString()吗?反之亦然,对于数字也可以使用包装类的,那么为什么我们需要一个(double)?等等,因为它们是不同的东西

Integer i = Integer.valueOf("0");
String zero1 = i.toString(); // WORKS
String zero2 = (String) i; // FAILS
toString()
方法是每个对象获取对象的字符串表示形式的方法

当您知道对象的类型时,可以使用强制转换,但它当前被称为超类型。

(String)
是一个类强制转换,仅当对象实际上是您强制转换到的类型(包括子类-但是,
String
final
,因此在这种情况下不能有子类). 如果对象的类型不是预期的,它将失败,并出现
ClassCastException
。强制转换不会创建新对象,也不会更改原始对象,只会为其提供不同类型的引用

OTOH,
toString()
是为所有对象定义的(潜在)转换,因此总是产生结果(当然,在空指针上调用时除外)。我写了电势,因为对于
String
s,显然没有发生转换。在其他情况下,转换通常会创建一个新对象(在我们的情况下,是一个
字符串),甚至可能修改原始对象的内部状态(例如,如果它正在缓存转换的结果-尽管这种差异对外部世界不应可见)。

(字符串)obj
的意思是:
obj
String
的一个实例,我需要这种类型的引用


toString()
是由所有
对象
实现的常规方法。

强制转换到
字符串
与对任意对象调用
.toString()
不同


请注意,强制转换根本不进行任何类型的转换:强制转换只不过是给编译器一个提示“看,我知道这个对象是一个
字符串
,所以我希望您将它视为一个
字符串
”。如果在运行时,对象不是真正的
字符串
,则会得到
ClassCastException
类型转换,包装器类和toString()完全不同


基本上,类型转换是将一个实体更改为具有不同数据类型的另一个实体的过程。意味着您只需更改实体的数据类型

包装器类用于从现有类型对象创建类型为的对象


.toString()是对象中定义的方法,此方法基本上用于以字符串格式表示对象。您可以重写此方法以任何字符串格式表示对象。

double、int、float是基本类型,而不是对象。不能执行int.toString

但是Double和Integer是可以从中生成对象的类,然后调用它们的方法,如Integer.toString()。

toString()
是一种已经在
对象中定义的方法,Java中的所有对象都隐式扩展了该类。它用于
系统.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)
强制转换,您只需强制转换一些包装器和原语,对于上述情况几乎没有用处。

“类型强制转换是将一个实体更改为另一个具有不同数据类型的实体的过程”——什么???这毫无意义,而且绝对不是JLS官方的说法。