在某些地方,我看到(String)value
。在某些地方value.toString()
这两者之间有什么区别。在哪种情况下我需要使用哪一种。
new Long(value)
和(Long)value
之间有什么区别?
答案 0 :(得分:7)
(String)value将对象值强制转换为字符串,该字符串必须扩展String。 value.toString()调用对象值的方法,该方法值从Object类继承,此方法返回String,显示该对象的信息。如果你有一些yourClass值,则建议覆盖toString()
new Long(value)创建Long类型的新对象,并将Long值设置为您的变量值。 (Long)值获取对象值并将其强制转换为Long类型的对象。 in Long(value)值必须是数字或字符串。
答案 1 :(得分:4)
在
new Long(value)
创建新的包装类Object
和
(Long)value
如果可能,将转换值输入Long(包装)。
同样String(value)
将转换值输入到String
但toString()是一个方法,它是一个对象类方法,必须根据需要覆盖它,例如。
class User
{
String name;
int age;
public String toString()
{
return "name :"+name+" \n age :"+age;
}
}
答案 2 :(得分:2)
在任何语言(我所知道)中,演员都会改变对象的类型。
如果您有一个编译器认为是Object的引用,但您知道它实际上是一个String,并且您希望编译器知道它,那么您可以使用强制转换(String)
。如果你有一个Integer并尝试强制转换为String,那么在运行代码时会出现ClassCastException。
因此,如果您有一个Integer并且想要它的String表示,那么您将使用toString。
(注意,强制转换将改变“标量”的类型。即,你可以使用(char)
从int转换为char,编译器将执行适当的转换。在这种情况下,“强制转换”是一个完全不同的概念。遗憾的是,传统导致两种语法使用相同的语法。)
答案 3 :(得分:0)
首先,值是一个字符串本身? (String)值是一个强制转换,只有值是一个字符串。 但是,调用value.toString()只是一个方法调用。 toString()是一种方法 对于java中的每个对象,即使值是一个整数,也不会失败。
现在,Calling(Long)值正在尝试将值转换为Long,并且只会起作用 如果value是Long类型。 并且,调用Long(value)实际上是调用Long类的构造函数, 传入值作为参数。
答案 4 :(得分:0)
当你将一个对象转换为String时,你确定它是一个字符串,并且在运行时如果它碰巧是另一个对象的实例,那么你会得到一个类转换异常。
另一方面,当您在对象上调用toString()方法时,它不必是一个字符串,因为所有类都从类对象继承该方法。
答案 5 :(得分:-1)
String
类实现CharSequence
,并且它从Object
类延伸。因此,如果有人使用其他类型的CharSequence
,我们必须像您的第一个版本(String)value
一样进行类型转换,如果它包含(String)value
对象{String
<(StringBuffer)value
{1}}用于StringBuffer类型的对象]
关于toString()
我们必须在我们的类中覆盖toString()
方法,它将根据我们的要求以String格式显示我们的对象表示。如果我们不覆盖那么toString()
类的Object
的默认实现将被继承,并且将以对象的哈希码的十六进制表示形式给出字符串,如UserObject@12dacd1
CharSequence
的其他实现是 CharBuffer,StringBuffer,StringBuilder
1&GT; (字符串)值表示value
包含String对象。如果它不包含String
,则ClassCastException
将在运行时抛出。如果您使用不相关的类型层次结构进行类型转换,则类型转换会抛出编译时异常。如下所示
Exception e = new Exception();
String str = (String)e;
2 - ;调用 toString()意味着anyobject
不一定是String
对象。在我们自己的类中正确覆盖toString()
方法将有助于我们自己的类的String表示,并且它将永远抛出java世界中存在的任何异常,因为它继承{{1}来自对象类。因此,如果您覆盖 toString 并打印toString()
,那么它将不会显示我们对象的哈希码的十六进制表示形式,例如System.out.println(userObject);
UserObject@12dacd1
关于新的Long(值)和(Long)值。
public class UserObject {
String name;
int age;
@Override
public String toString() {
return " Name="+name+" \n age="+age;
}
public static void main(String[] args) {
UserObject uo = new UserObject();
uo.name="AAA";
uo.age=18;
System.out.println(uo); //output will be "Name=AAA age=18" instead of "UserObject@12dacd1"
}
}
表示您希望将其转换为包装类new Long(value)
对象的long/String
值。因此,您可以根据条件使用Long(long),Long(String)constructor。
长类型转换解释类似于上面的字符串类型转换或任何类型转换。 Long
表示当您获得如下代码时,您可以将类型转换为Long,Integer,Double,也取决于等号右侧的赋值。
(Long)value
答案 6 :(得分:-1)
这些都非常不同。第一个是Type Casting
。假设您在方法上收到一个Object,并且您知道它是一个String,因此您希望将其称为该类型。所以你这样做
public void method(Object obj){
String str = (String) obj;
}
toString方法是从Object类继承的方法,它返回给定String
任何给定Object
的表示。
所以区别在于,当你进行投射时,你的对象必须已经是String
,没有实际的转换。不同之处在于,您可以为变量使用更具体的类型,但在调用不必要的toString时。
调用toString
可能会为您提供与原始对象不同的对象,除非您的类已经是String
,在这种情况下会返回相同的引用。
答案 7 :(得分:-1)
当你执行“(String)value”时它是一个转换,换句话说,你明确地“说”编译器的值是一个字符串,但如果没有,将抛出一个运行时异常。
当你执行“value.ToString()”时,将创建一个具有此值的新字符串
同样适用于Long