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



如果我们创建一个如下所示的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对象的方式相同,并打印了该对象。 那么为什么它不为A实例打印给定的String呢?

您需要

覆盖类中的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";
}
您必须在

类中以调用System.out.println();时打印内容的方式override toString()方法。在类String toString()方法具有覆盖,因此您将退出上面的位置。

如前所述,您需要覆盖从 Object 类继承的默认 toString() 方法。每个类都会自动扩展Object类,该类有一个相当简单的toString(),它不知道如何将你的特定对象转换为字符串。为什么要这样做,特别是如果你的类是任意复杂的?它应该知道如何将所有类的字段转换为"合理的"字符串表示形式?

在类的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);
    }
}

字符串是一个类,其目的是保存字符串值,如果引用,将返回该值。 使用其他类时,通常需要添加其他行为。如果要使用该类来保存可以设置的不同值(在对象创建时或稍后处理时),则可能需要对此类值使用"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;
}
}

最新更新