String Buffer方法" toString"

时间:2017-03-14 17:59:19

标签: java

当你打电话给" toString"没有字符串变量的方法来收集返回的值? 例如:这里有两个我厌倦的代码片段。第一个给出了正确的答案,第二个给出了错误的答案,但它仍然编译。如果" toString"方法是为了返回一个值,不应该为第二个代码块得到编译器错误吗?

StringBuffer sb=new StringBuffer(s); //s is a string input taken from user
        sb.reverse();
        String rev=sb.toString();
        if(s.equals(rev)){
            System.out.println("yes");
/*second try*/
StringBuffer sb=new StringBuffer(s); 
        sb.reverse();
        sb.toString();//what is happening here?
        if(s.equals(sb)){
            System.out.println("yes");

6 个答案:

答案 0 :(得分:1)

理解起来很简单。

在第一种情况中,返回值并由变量引用,以便稍后可以使用该值。

在第二种情况中,返回的值与之前一样,但任何变量都没有引用它。因此,价值只是浪费,以后不能使用或操纵。

答案 1 :(得分:0)

toString将返回对象返回的toString方法。 试试System.out.println(sb.toString);看看它的回归。

答案 2 :(得分:0)

StringBuffer#toString()返回一个字符串,如果你没有将返回的值放在一个变量中,那么就会发生这样的事情并且你请求的信息都消失了。

答案 3 :(得分:0)

.toString()是一个返回字符串的方法,它不会将StringBuffer转换为字符串。

if(s.equals(sb.toString()))会起作用,因为它将ssb的值作为字符串进行比较,即使它没有将值赋给变量。

答案 4 :(得分:0)

  

sb.toString(); //这里发生了什么?

您要将StringBuilder对象转换为String这是好的,但您没有将返回值存储到String类型,并在equals调用中稍后使用。你应该采用以下方式:

String reversedString = sb.toString();
if(s.equals(reversedString )){

或者只是

if(s.equals(sb.toString())){

现在,您正在使用s类的sb方法将equalsString进行比较。如果作为参数传入的对象不是false类的实例,则此方法返回String。由于StringBuilder对象sb不是String的实例,因此equals方法返回false。

答案 5 :(得分:0)

在Java中,您不必检查或存储任何返回值。 执行sb.toString()并截断返回值。

请注意,必须执行该方法,因为可能存在副作用。要测试它,您可以在您的课程中实现:

@Override
public String toString() {
    System.out.println("toStringTest");
    return super.toString();
}

“toStringTest”将被推出!