8

在一些地方我看到了(String)value。在一些地方value.toString()

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

new Long(value)和和有什么区别 (Long)value

4

8 回答 8

9

(String) value 将对象值转换为字符串,该字符串必须扩展 String。value.toString() 调用对象值上的方法,该值继承自 Object 类,该方法返回 String,显示该对象的信息。如果你有一些 yourClass 值,建议覆盖 toString()

new Long(value) 创建 Long 类型的新对象并将 Long 的值设置为您的变量值。(Long)value 获取对象值并将其转换为 Long 类型的对象。Long(value) 中的值必须是数字或字符串。

于 2013-04-09T11:40:20.397 回答
4

new Long(value)

创建新的包装类 Object

(Long)value

如果可能,将值转换为 Long(到包装器)。

相似地

String(value)

将值类型转换为字符串

但是 toString() 是一种方法,它是一种对象类方法,必须根据需要重写它,例如。

class User
{
String name;
int age;

public String toString()
{
return "name :"+name+" \n  age :"+age;
}
}
于 2013-04-09T11:42:17.193 回答
3

在任何语言(我所知道的)中,演员阵容都不会改变对象的类型。

(String)例如,当您有一个编译器认为是对象的引用时,您使用强制转换,但您知道它实际上是一个字符串,并且您希望编译器知道这一点。如果您有一个 Integer 并尝试强制转换为 String,则在运行代码时会收到 ClassCastException。

因此,如果您有一个 Integer 并想要它的 String 表示,您将使用 toString。

(请注意,强制转换会改变“标量”的类型。也就是说,您可以从 int 强制转换为 char(char)并且编译器将执行适当的转换。在这种情况下,“强制转换”是一个完全不同的概念。不幸的是传统导致两者使用相同的语法。)

于 2013-04-09T11:50:08.397 回答
1

首先, value 本身是一个字符串吗?(String)value 是一个强制转换,只有在 value 是一个字符串时才有效。但是,调用 value.toString() 只是一个方法调用。toString() 是 java 中每个对象的方法,因此即使 value 是整数也不会失败。

现在,调用 (Long)value 正在尝试将 value 转换为 Long,并且仅在 value 为 Long 类型时才有效。并且,调用 Long(value) 实际上是调用 Long 类的构造函数,传入 value 作为参数。

于 2013-04-09T11:42:32.833 回答
1

当您将一个对象转换为 String 时,您可以确定它是一个字符串,并且在运行时如果它恰好是另一个对象的实例,那么您会得到一个类转换异常。

另一方面,当您在对象上调用 toString() 方法时,它不必是字符串,因为所有类都从类对象继承该方法。

于 2014-10-06T11:51:28.070 回答
-1

String类实现CharSequence,它也从Object类扩展。因此,如果有人使用其他类型,CharSequence我们必须像您的第一个版本一样进行类型转换(String)value
[(String)value如果它包含String对象和对象(StringBuffer)value的 StringBuffer 类型]
关于toString()我们必须覆盖toString()我们类中的方法,该方法将根据我们的要求以字符串格式显示我们的对象表示. 如果我们不覆盖,那么toString()fromObject类的默认实现将被继承,并将以十六进制表示的字符串给出我们对象的哈希码,例如UserObject@12dacd1

其他实现CharSequenceCharBuffer、StringBuffer、StringBuilder

1> (String)value表示value包含 String 对象。如果它不包含StringClassCastException在运行时抛出。如果您使用不相关的类型层次结构进行类型转换,则类型转换将引发编译时异常。如下所示

Exception e = new Exception();
String str = (String)e;

2> 调用toString()表示anyobject 不一定是String对象。我们自己的类中正确的覆盖toString()方法将有助于我们自己的类的 String 表示,并且它永远不会抛出 java 世界中存在的任何异常,因为它继承toString()自对象类。因此,如果您覆盖toString并打印System.out.println(userObject);,那么它将不会显示我们对象的哈希码的十六进制表示,例如UserObject@12dacd1

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"

    }
}

关于新的 Long(value) 和 (Long)value。

new Long(value)意味着,您有价值,因为long/String您想将其转换为包装类Long对象。所以你可以根据条件使用 Long(long), Long(String)构造函数

长类型转换解释类似于上面的字符串类型转换或任何类型转换。(Long)value 意味着当您获得如下代码时,您可以将类型转换为 Long、Integer、Double 以及取决于等号右侧的分配值。

Number i=10L; //java.lang.Number
Long a= (Long)i;
于 2013-04-09T11:42:50.893 回答
-1

这些都非常不同。第一个是Type Casting。假设您在方法上收到一个 Object,并且您知道它是一个 String,因此您希望它被称为该类型。所以你这样做

public void method(Object obj){
    String str = (String) obj;
}

toString方法是从Object类继承的一个方法,它返回给您String任何给定的表示Object

所以不同的是,当你进行转换时,你的对象必须已经是 a String,没有实际的转换。不同之处在于您可以为变量使用更具体的类型,但是当您调用 toString 时,这不是必需的。

调用toString可能会为您提供与原始对象不同的对象,除非您的类已经是 a String,在这种情况下返回相同的引用。

于 2013-04-09T11:42:54.580 回答
-1

当您执行“(字符串)值”时,它是一个强制转换,换句话说,您明确地为编译器“说”该值是一个字符串,但如果不是,则会引发运行时异常。

当您执行“value.ToString()”时,将使用此值创建一个新字符串

长也一样

于 2013-04-09T11:48:43.383 回答