在一些地方我看到了(String)value
。在一些地方value.toString()
这两者有什么区别。在哪种情况下我需要使用哪个。
new Long(value)
和和有什么区别 (Long)value
?
(String) value 将对象值转换为字符串,该字符串必须扩展 String。value.toString() 调用对象值上的方法,该值继承自 Object 类,该方法返回 String,显示该对象的信息。如果你有一些 yourClass 值,建议覆盖 toString()
new Long(value) 创建 Long 类型的新对象并将 Long 的值设置为您的变量值。(Long)value 获取对象值并将其转换为 Long 类型的对象。Long(value) 中的值必须是数字或字符串。
在
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;
}
}
在任何语言(我所知道的)中,演员阵容都不会改变对象的类型。
(String)
例如,当您有一个编译器认为是对象的引用时,您使用强制转换,但您知道它实际上是一个字符串,并且您希望编译器知道这一点。如果您有一个 Integer 并尝试强制转换为 String,则在运行代码时会收到 ClassCastException。
因此,如果您有一个 Integer 并想要它的 String 表示,您将使用 toString。
(请注意,强制转换会改变“标量”的类型。也就是说,您可以从 int 强制转换为 char(char)
并且编译器将执行适当的转换。在这种情况下,“强制转换”是一个完全不同的概念。不幸的是传统导致两者使用相同的语法。)
首先, value 本身是一个字符串吗?(String)value 是一个强制转换,只有在 value 是一个字符串时才有效。但是,调用 value.toString() 只是一个方法调用。toString() 是 java 中每个对象的方法,因此即使 value 是整数也不会失败。
现在,调用 (Long)value 正在尝试将 value 转换为 Long,并且仅在 value 为 Long 类型时才有效。并且,调用 Long(value) 实际上是调用 Long 类的构造函数,传入 value 作为参数。
当您将一个对象转换为 String 时,您可以确定它是一个字符串,并且在运行时如果它恰好是另一个对象的实例,那么您会得到一个类转换异常。
另一方面,当您在对象上调用 toString() 方法时,它不必是字符串,因为所有类都从类对象继承该方法。
String
类实现CharSequence
,它也从Object
类扩展。因此,如果有人使用其他类型,CharSequence
我们必须像您的第一个版本一样进行类型转换(String)value
[(String)value
如果它包含String
对象和对象(StringBuffer)value
的 StringBuffer 类型]
关于toString()
我们必须覆盖toString()
我们类中的方法,该方法将根据我们的要求以字符串格式显示我们的对象表示. 如果我们不覆盖,那么toString()
fromObject
类的默认实现将被继承,并将以十六进制表示的字符串给出我们对象的哈希码,例如UserObject@12dacd1
其他实现CharSequence
是CharBuffer、StringBuffer、StringBuilder
1> (String)value表示value
包含 String 对象。如果它不包含String
将ClassCastException
在运行时抛出。如果您使用不相关的类型层次结构进行类型转换,则类型转换将引发编译时异常。如下所示
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;
这些都非常不同。第一个是Type Casting
。假设您在方法上收到一个 Object,并且您知道它是一个 String,因此您希望它被称为该类型。所以你这样做
public void method(Object obj){
String str = (String) obj;
}
toString方法是从Object类继承的一个方法,它返回给您String
任何给定的表示Object
。
所以不同的是,当你进行转换时,你的对象必须已经是 a String
,没有实际的转换。不同之处在于您可以为变量使用更具体的类型,但是当您调用 toString 时,这不是必需的。
调用toString
可能会为您提供与原始对象不同的对象,除非您的类已经是 a String
,在这种情况下返回相同的引用。
当您执行“(字符串)值”时,它是一个强制转换,换句话说,您明确地为编译器“说”该值是一个字符串,但如果不是,则会引发运行时异常。
当您执行“value.ToString()”时,将使用此值创建一个新字符串
长也一样