Java toString()方法和using(+;”之间的区别
如果我有几乎任何类型的数据类型(我记得),我可以执行以下操作:Java toString()方法和using(+;”之间的区别,java,Java,如果我有几乎任何类型的数据类型(我记得),我可以执行以下操作: intx=5 用定义调用函数 function_name(String x){ //do something } 像这样的函数\u name(x+“”)//可以使用(+“”)来处理我能记住的几乎任何类型的函数 有时对某些数据类型甚至类使用.toString() 我确实理解两者的含义。但有一件事我真的很困惑 我的问题: 为什么我们要费心为任何类创建toString()方法,即使它可以使用(+)? 这只是让我们类的用户使用这
intx=5代码>
用定义调用函数
function_name(String x){
//do something
}
像这样的函数\u name(x+“”)//可以使用(+“”)来处理我能记住的几乎任何类型的函数
.toString()
toString()
方法,即使它可以使用(+)
?
这只是让我们类的用户使用这个toString()
方法的一种方式,还是更快它们是替代品吗?
希望我能澄清我的问题。谢谢。调用myObject+”
与调用myObject.toString()+”
相当,因此+”
只是多余的
问题:对integer执行该操作怎么样?这不是演员吗
回答:这是对字符串的隐式调用。valueOf()toString()可能并不总是打印您想要的内容。如果在未被覆盖的对象*上使用它,它将打印对象的地址。您可以覆盖toString(),使其按需运行。您无法避免toString(),因为java就是这样获得对象的字符串表示形式的。x+“”调用x.toString()。
- 在对象上执行
操作时,实际上是在调用+“”
方法toString()
- 如果对未覆盖
的对象执行toString()
,则调用+”
对象的
方法。生成类似toString()
。这样您就知道,如果没有MyClass@1948cc8c
,则toString()
是没有用的+“
System.out.println(myList + "");
你会得到一根看起来很奇怪的绳子。试试看。它不像许多其他人所说的那样是任何东西的“地址”
简而言之,如果变量+“”对您有效,.toString()已经实现。显式调用.toString()不会改变任何东西,不管怎样,它都会发生。如果它不能与var+“”一起工作,那么与.toString()一起工作也不会更好。您可以通过实现(重写)类的.toString()方法来解决这两个问题。它们几乎相同,只是有一个区别:
myObject+”
在myObject为null时不会抛出NPE,但myObject.toString()++
会抛出NPE。调用myObject+”
相当于调用String.valueOf(myObject)+
。String.valueOf()反过来被重载,以根据参数类型执行各种操作,包括为空对象参数返回“null”,为非空对象参数调用argument.toString(),或为整数参数调用Integer.toString(int)
所以你的问题没有意义。由于“+”导致调用toString(),因此它不是它的替代方法。我看到这种方法“+x”的唯一区别是,与仅使用toString相比,任何中间对象都不可能更有效 但是,这可能并不总是正确的,因为jvm可能会执行一些优化以避免创建多个对象。请参阅以下粗体文本: 从 字符串连接的结果是对字符串对象的引用 这是两个操作数字符串的串联。人物 左操作数的字符位于右操作数的字符之前 新创建的字符串中的操作数 字符串对象是新创建的(§12.5),除非表达式是 编译时常量表达式(§15.28) 实现可以选择执行转换和串联 在一个步骤中避免创建然后丢弃中间 字符串对象以提高重复字符串的性能 连接时,Java编译器可以使用StringBuffer类或 减少中间字符串对象数量的类似技术 通过表达式求值创建的。 对于基元类型,实现还可以优化 通过直接从基元转换来创建包装器对象 键入一个字符串 仅供参考,以下是基本类型的工作原理: 任何类型都可以通过字符串转换转换为字符串类型。价值 原始类型T的x首先转换为参考值,就像 将其作为参数提供给适当的类实例创建 表达式(§15.9):如果T是布尔值,则使用新的布尔值(x)。如果T是 字符,然后使用新字符(x)。如果T是byte、short或int,则使用 新的整数(x)。如果T长,则使用新的长(x)。如果T是浮动的, 然后使用新的浮动(x)。如果T是双精度的,则使用新的双精度(x)。这 然后通过字符串转换将引用值转换为类型字符串
在某些情况下,即使没有toString()方法,我们也可以只执行+“”操作。你能告诉我为什么要使用toString()方法吗?这是我的问题,不是它是如何运作的。这是关于速度还是其他什么?这是我的观点-它将隐式调用到strings的转换,那么对integer进行转换呢?这不是强制转换吗?这是对String的隐式调用。valueOf()@Nabin Integers是具体的例子。但是,您可以考虑其他情况,如用户定义的类。尝试打印该对象的值,您将遇到
hashcode
。因此,toString()
被重写,+“
仅用于基本数据类型@天哪,那是什么?对问题
System.out.println(myList + "");