如果我们在下面创建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
?
答案 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();
方法。在String
类toString()
中,方法具有覆盖功能,您将因此而退出上面。
答案 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;
}
}