String s1 = new String(“demo”);打印时为什么它会将输出作为给定的字符串?

时间:2014-02-10 12:23:47

标签: java string class constructor

如果我们在下面创建String并打印值:

String s=new String("demo");
System.out.println(s);

...输出是:

demo

好。这是预期的产出。但是这里String是一个类。记住这一点。下面是另一个例子。例如,拿一个这样的类:

class A
{
  public static void main (String args[])
  {
    A a =new A();
    A a1=new A("hi");  //we should create a Constructor like A(String name)

    System.out.println(a1);    //here O/P is address

  }
}

我怀疑的是,我创建A实例的方式与创建新String对象的方式相同,我打印了该对象。那么为什么不为String的实例打印给定的A

4 个答案:

答案 0 :(得分:1)

您需要覆盖班级中的Object#toString()。默认情况下,调用Object的toString()方法。

此外,要打印该值,您只需要在内部覆盖该方法,在执行此语句时将调用toString()方法。

System.out.println(a1);

示例覆盖toString()方法。

@Override
public String toString() {
    // return a string value
    return "The String representation of your class, as per your needs";
}

答案 1 :(得分:0)

在您的课程中,您必须按照override调用时打印方式的方式toString() System.out.println();方法。在StringtoString()中,方法具有覆盖功能,您将因此而退出上面。

答案 2 :(得分:0)

正如已经指出的那样,您需要覆盖从toString()继承的默认Object方法。每个类都自动扩展Object类,它有一个相当简单的toString(),它不知道如何将您的特定对象转换为String。为什么要这样,特别是如果你的班级是任意复杂的?如何知道如何将所有类的字段转换为“合理的”字符串表示形式?

在班级的toString()中,您需要返回您想要代表您的班级的字符串。这是一个简单的例子:

class A {
    String foo;

    public A(String foo) {
        this.foo = foo;
    }

    public String toString() {
        return foo;
    }
}

public class sample {



    public static void main(String[] args) {
        A a = new A("Hello world!");
        System.out.println(a);
    }
}

答案 3 :(得分:0)

String是一个类,其目的是保存字符串值,并在引用时返回该值。当您使用其他类时,通常需要添加其他行为。如果要使用该类来保存可以设置的不同值(在创建对象或稍后处理时),您可能需要对这些值使用“setter”和“getter”方法。

以下是一个例子:

public class Snippet {
private static final String C_DEFAULT_VALUE = "<default value>";

private String name;
private static Snippet mySnippet;

public Snippet() {

}
public Snippet(String value) {
    setName(value);
}

/**
 * @param args
 */
public static void main(String[] args) {
    if (args != null && args.length > 0) {
        mySnippet = new Snippet(args[0]);
    } else {
        mySnippet = new Snippet(C_DEFAULT_VALUE);
    }
    System.out.println(mySnippet.getName());
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

}