Java 中的 .toString() 和 (String) 有什么区别
What is difference between .toString() and (String) cast in Java
我想从 returns Object
类型的会话对象中读取一个值。
我知道该对象具有 true
/false
值。
我想将该值转换为 boolean
类型。所以我有以下代码。
session.getAttribute("MyKeyValue"); // It returns Object type
下面抛出异常。
boolean myBoolVal = Boolean.parseBoolean((String) session.getAttribute("MyKeyValue"));
以下工作正常。
boolean myBoolVal = Boolean.parseBoolean(session.getAttribute("MyKeyValue").toString());
实际上,我不明白为什么选项 1 不起作用?
当由 session.getAttribute("MyKeyValue")
编辑的实例 return 的运行时类型不是 String
时,将其转换为 String
会引发 ClassCastException
。
另一方面,session.getAttribute("MyKeyValue").toString()
始终有效(假设 session.getAttribute("MyKeyValue")
不为空),因为所有对象都实现了 toString()
方法。
顺便说一句,由于 session.getAttribute("MyKeyValue")
不是 return String
,它 return 很可能是 Boolean
(因为您期望 Boolean.parseBoolean()
工作),所以如果是这种情况,而不是将其转换为 String
然后转换为 Boolean
,您可以将其转换为 Boolean
:
Boolean myBoolVal = (Boolean) session.getAttribute("MyKeyValue");
您可以在会话对象中设置您想要的任何对象,并为其关联一个键。任何对象是指任何class的任何对象。由于任何 class 可能是 Object
的间接子 class,因此类型是 set
和 get
.
中的 Object
当您通过 get
检索对象时,它被简单地键入为 Object
但肯定是某个子 class。如果原始 class 不是 String
,则(向下)将其转换为 String
可能会失败(抛出异常,说明 cast/conversion 无法实现)。您的选项 1 似乎是这种情况。
选项 2 有效,因为任何 Object
实例都有一个方法 toString()
,可以调用该方法来获得对象的 String
表示(主要用于在屏幕上显示它)。然后你 parse
该表示(可能 "true"
或 "false"
)获得 boolean
值 true
或 false
.
因此,如果您希望选项 1 起作用,因为您的对象可能是一个 Boolean
实例,您可以使用:
boolean myBoolVal = (Boolean)session.getAttribute("MyKeyValue");
我想从 returns Object
类型的会话对象中读取一个值。
我知道该对象具有 true
/false
值。
我想将该值转换为 boolean
类型。所以我有以下代码。
session.getAttribute("MyKeyValue"); // It returns Object type
下面抛出异常。
boolean myBoolVal = Boolean.parseBoolean((String) session.getAttribute("MyKeyValue"));
以下工作正常。
boolean myBoolVal = Boolean.parseBoolean(session.getAttribute("MyKeyValue").toString());
实际上,我不明白为什么选项 1 不起作用?
当由 session.getAttribute("MyKeyValue")
编辑的实例 return 的运行时类型不是 String
时,将其转换为 String
会引发 ClassCastException
。
另一方面,session.getAttribute("MyKeyValue").toString()
始终有效(假设 session.getAttribute("MyKeyValue")
不为空),因为所有对象都实现了 toString()
方法。
顺便说一句,由于 session.getAttribute("MyKeyValue")
不是 return String
,它 return 很可能是 Boolean
(因为您期望 Boolean.parseBoolean()
工作),所以如果是这种情况,而不是将其转换为 String
然后转换为 Boolean
,您可以将其转换为 Boolean
:
Boolean myBoolVal = (Boolean) session.getAttribute("MyKeyValue");
您可以在会话对象中设置您想要的任何对象,并为其关联一个键。任何对象是指任何class的任何对象。由于任何 class 可能是 Object
的间接子 class,因此类型是 set
和 get
.
Object
当您通过 get
检索对象时,它被简单地键入为 Object
但肯定是某个子 class。如果原始 class 不是 String
,则(向下)将其转换为 String
可能会失败(抛出异常,说明 cast/conversion 无法实现)。您的选项 1 似乎是这种情况。
选项 2 有效,因为任何 Object
实例都有一个方法 toString()
,可以调用该方法来获得对象的 String
表示(主要用于在屏幕上显示它)。然后你 parse
该表示(可能 "true"
或 "false"
)获得 boolean
值 true
或 false
.
因此,如果您希望选项 1 起作用,因为您的对象可能是一个 Boolean
实例,您可以使用:
boolean myBoolVal = (Boolean)session.getAttribute("MyKeyValue");