(String)value和value.toString(),new Long(value)和(Long)值之间的差异

时间:2013-04-09 11:38:26

标签: java casting

在某些地方,我看到(String)value。在某些地方value.toString()

这两者之间有什么区别。在哪种情况下我需要使用哪一种。

new Long(value)(Long)value之间有什么区别?

8 个答案:

答案 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