如果我有几乎任何类型的数据类型(我记得),我可以执行以下操作:
int x = 5;
带定义的呼叫功能
function_name(String x){
//do something
}
像这样 function_name(x +“”) //可以使用(+“”)几乎任何我记得的类型
.toString()
用于某些数据类型甚至是类。我确实理解两者的含义。但我真的很困惑。
我的问题:
即使使用toString()
工作正常,我们为什么还要为任何类创建(+"")
方法呢?
它只是一种为我们班级的用户提供这种toString()
方法的方法,还是更快? 他们是替代品吗?
希望我能澄清我的问题。谢谢。
答案 0 :(得分:4)
调用myObject + ""
等同于调用myObject.toString() + ""
,因此+ ""
只是多余的。
问题:如何对整数进行操作?不是在铸造吗?
答案:这是对String.valueOf()的隐式调用
答案 1 :(得分:2)
+""
时,您实际上正在调用toString()
方法。+""
的对象执行toString()
,则会调用toString()
类的Object
方法。制作类似MyClass@1948cc8c
的内容。这样您就知道+""
没有toString()
没有用。答案 2 :(得分:1)
toString()
是在Object类中声明的方法,所有类都隐式继承。默认情况下,toString()方法返回类名,后跟@后跟hashCode()的十六进制字符串。
Integer类和许多其他类重写此方法以提供有用的东西。
List类不会这样做。如果你试图
System.out.println(myList + "");
你会看到一个奇怪的字符串。试试吧。它不是"地址"像许多其他人所说的那样。
简而言之,如果变量+""适合您,.toString()已经实现。显式调用.toString()不会改变任何东西,无论如何都会发生什么。如果它不适用于var +""使用.toString()并没有更好的效果。您可以通过实现(重写)类的.toString()方法来解决这两个问题。
答案 3 :(得分:1)
myObject+""
不会抛出NPE,但myObject.toString()+""
将会抛出。
答案 4 :(得分:1)
致电myObject + ""
相当于致电String.valueOf(myObject) + ""
。反过来,String.valueOf()被重载以执行依赖于参数类型的各种事情,包括返回" null"对于null对象参数,为非空对象参数调用argument.toString(),或为整数参数调用Integer.toString(int)。
所以你的问题没有意义。作为+""导致调用toString(),它不是它的替代品。
答案 5 :(得分:1)
我用这种方法看到的唯一区别是“”+ x是没有任何中间对象可以与使用toString进行比较。
然而,这可能并不总是正确的,因为jvm可能会执行一些优化以避免创建多个对象。请在下面以粗体显示文本:
字符串连接的结果是对String对象的引用 这是两个操作数字符串的串联。那些角色 左手操作数的前面是右手的字符 新创建的字符串中的操作数。
除非表达式是a,否则新创建String对象(第12.5节) 编译时常量表达式(§15.28)。
实现可以选择执行转换和连接 在一步中避免创建然后丢弃中间体 字符串对象。 增加重复字符串的性能 连接,Java编译器可以使用StringBuffer类或a 类似的技术减少了中间String对象的数量 通过评估表达式创建的。
对于原始类型,实现也可以优化掉 通过直接从基元转换来创建包装器对象 键入字符串。
仅供参考,这是原始类型的工作原理,来自docs:
任何类型都可以通过字符串转换转换为String类型。一个值 原始类型T的x首先被转换为参考值,如同 将它作为适当的类实例创建的参数 表达式(第15.9节):如果T是布尔值,则使用new Boolean(x)。如果T是 char,然后使用new Character(x)。如果T是byte,short或int,那么使用 new Integer(x)。如果T很长,则使用新的Long(x)。如果T是浮动的, 然后使用新的Float(x)。如果T为double,则使用new Double(x)。这个 然后通过字符串转换将引用值转换为String类型。
答案 6 :(得分:0)
toString()可能无法始终打印出您想要的内容。如果在未被覆盖的对象*上使用它,它将打印对象的地址。您可以覆盖toString()以根据需要进行操作。
答案 7 :(得分:0)
你不能避免toString(),因为这就是java获取对象的字符串表示的方式。 X +""调用x.toString()。