如何在Java中使用toString方法?

Dav*_*own 115 java

任何人都可以向我解释一下toString()Object课堂上定义的方法的概念吗?它是如何使用的,它的目的是什么?

Sea*_*oyd 82

来自Object.toString()文档:

返回对象的字符串表示形式.通常,toString方法返回一个"文本表示"此对象的字符串.结果应该是一个简洁但信息丰富的表示,便于人们阅读.建议所有子类都重写此方法.

类Object的toString方法返回一个字符串,该字符串由对象为实例的类的名称,符号字符"@"和对象的哈希码的无符号十六进制表示组成.换句话说,此方法返回一个等于值的字符串:

getClass().getName() + '@' + Integer.toHexString(hashCode())
Run Code Online (Sandbox Code Playgroud)

例:

String[] mystr ={"a","b","c"};
System.out.println("mystr.toString: " + mystr.toString());

output:- mystr.toString: [Ljava.lang.String;@13aaa14a
Run Code Online (Sandbox Code Playgroud)


小智 40

使用String toString:每当你需要在String表单中探索名为value的构造函数时,你可以简单地使用String toString ...作为一个例子......

package pack1;

import java.util.*;

class Bank {

    String n;
    String add;
    int an;
    int bal;
    int dep;

    public Bank(String n, String add, int an, int bal) {

        this.add = add;
        this.bal = bal;
        this.an = an;
        this.n = n;

    }

    public String toString() {
        return "Name of the customer.:" + this.n + ",, "
                + "Address of the customer.:" + this.add + ",, " + "A/c no..:"
                + this.an + ",, " + "Balance in A/c..:" + this.bal;
    }
}

public class Demo2 {

    public static void main(String[] args) {

        List<Bank> l = new LinkedList<Bank>();

        Bank b1 = new Bank("naseem1", "Darbhanga,bihar", 123, 1000);
        Bank b2 = new Bank("naseem2", "patna,bihar", 124, 1500);
        Bank b3 = new Bank("naseem3", "madhubani,bihar", 125, 1600);
        Bank b4 = new Bank("naseem4", "samastipur,bihar", 126, 1700);
        Bank b5 = new Bank("naseem5", "muzafferpur,bihar", 127, 1800);
        l.add(b1);
        l.add(b2);
        l.add(b3);
        l.add(b4);
        l.add(b5);
        Iterator<Bank> i = l.iterator();
        while (i.hasNext()) {
            System.out.println(i.next());
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

...将这个程序复制到你的eclipse中,然后运行它......你会得到关于String toString的想法......

  • 我希望你知道`toString`并不适合用户界面. (4认同)
  • 鉴于您继续使用默认的Swing API,这是迄今为止完成工作的最简单方法。如果要自定义渲染,可以在组件上安装自定义渲染器。如果您只想显示一个由String表示的对象,则与自定义渲染器相比,实现toString()更加容易,自定义渲染器完全可以做到这一点。我认为您与跳桥的比较很奇怪。 (2认同)

And*_*s_D 34

toString()方法返回对象的文本表示.基本实现已经包含在内,java.lang.Object因为所有从java.lang.Object它继承的对象都保证Java中的每个对象都有这个方法.

覆盖该方法总是一个好主意,特别是在调试方面,因为调试器通常会根据toString()方法的结果显示对象.因此,请使用有意义的实现,但将其用于技术目的.应用程序逻辑应该使用getter:

public class Contact {
  private String firstName;
  private String lastName;
  public Contact (String firstName, String lastName) {
    this.firstName = firstName;
    this.lastName = lastName;
  }
  public String getFirstName() {return firstName;}
  public String getLastName() {return lastName;}

  public String getContact() {
    return firstName + " " + lastName;
  }

  @Override
  public String toString() {
    return "["+getContact()+"]";
  }
}
Run Code Online (Sandbox Code Playgroud)


cle*_*tus 15

它可以选择在应用程序的上下文中使用,但更常用于调试目的.例如,当您在IDE中遇到断点时,读取有意义toString()的对象比检查其成员要容易得多.

toString()方法应该做什么没有固定的要求.按照惯例,大多数情况下,它会告诉您类的名称和相关数据成员的值.通常,toString()在IDE中自动生成方法.

依赖于toString()方法的特定输出或在程序中解析它是一个坏主意.无论你做什么,都不要走那条路.

  • 您能否详细说明您的最后声明? (2认同)

小智 12

toString()返回对象的字符串/文本表示.通常用于调试,日志记录等诊断目的,toString()方法用于读取有关对象的有意义的详细信息.

将对象传递给println,print,printf,String.format(),assert或字符串连接运算符时,会自动调用它.

类Object中toString()的默认实现返回一个字符串,该字符串由此对象的类名后跟@符号和此对象的哈希码的无符号十六进制表示形式,使用以下逻辑,

getClass().getName() + "@" + Integer.toHexString(hashCode())
Run Code Online (Sandbox Code Playgroud)

例如,以下内容

public final class Coordinates {

    private final double x;
    private final double y;

    public Coordinates(double x, double y) {
        this.x = x;
        this.y = y;
    }

    public static void main(String[] args) {
        Coordinates coordinates = new Coordinates(1, 2);
        System.out.println("Bourne's current location - " + coordinates);
    }
}
Run Code Online (Sandbox Code Playgroud)

版画

Bourne's current location - Coordinates@addbf1 //concise, but not really useful to the reader
Run Code Online (Sandbox Code Playgroud)

现在,覆盖Coordinates类中的toString(),如下所示,

@Override
public String toString() {
    return "(" + x + ", " + y + ")";
}
Run Code Online (Sandbox Code Playgroud)

结果是

Bourne's current location - (1.0, 2.0) //concise and informative
Run Code Online (Sandbox Code Playgroud)

在包含对这些对象的引用的集合上调用方法时,重写toString()的用处变得更加有用.例如,以下内容

public static void main(String[] args) {
    Coordinates bourneLocation = new Coordinates(90, 0);
    Coordinates bondLocation = new Coordinates(45, 90);
    Map<String, Coordinates> locations = new HashMap<String, Coordinates>();
    locations.put("Jason Bourne", bourneLocation);
    locations.put("James Bond", bondLocation);
    System.out.println(locations);
}
Run Code Online (Sandbox Code Playgroud)

版画

{James Bond=(45.0, 90.0), Jason Bourne=(90.0, 0.0)}
Run Code Online (Sandbox Code Playgroud)

而不是这个,

{James Bond=Coordinates@addbf1, Jason Bourne=Coordinates@42e816}
Run Code Online (Sandbox Code Playgroud)

很少有实现指针,

  1. 您几乎应该总是覆盖toString()方法.其中一个不需要覆盖的情况是以java.util.Math的方式对静态实用程序方法进行分组的实用程序类.不需要覆盖的情况非常直观; 几乎总是你会知道.
  2. 返回的字符串应该简洁,信息丰富,理想情况下不言自明.
  3. 至少,用于在两个不同对象之间建立等价的字段,即equals()方法实现中使用的字段应该由toString()方法吐出.
  4. 为返回的字符串中包含的所有实例字段提供访问器/ getter.例如,在Coordinates类中,

    public double getX() {
        return x;
    }
    public double getY() {
        return y;
    }
    
    Run Code Online (Sandbox Code Playgroud)

toString()方法的全面介绍在本书的第10项,Effective Java™,第二版,作者Josh Bloch.


Tho*_*sen 5

每当您在String上下文中访问Object(不是String)时,编译器都会在封面下调用toString().

这就是为什么

Map map = new HashMap();
System.out.println("map=" + map);
Run Code Online (Sandbox Code Playgroud)

通过在您自己的类中重写Object的标准toString(),您可以使您的对象在String上下文中也很有用.

(并将其视为一个黑盒子!永远不要将内容用于除了呈现给人类之外的任何其他内容)


Luf*_*ffy 5

编码:

public class Test {

    public static void main(String args[]) {

        ArrayList<Student> a = new ArrayList<Student>();
        a.add(new Student("Steve", 12, "Daniel"));
        a.add(new Student("Sachin", 10, "Tendulkar"));

        System.out.println(a);

        display(a);

    }

    static void display(ArrayList<Student> stu) {

        stu.add(new Student("Yuvi", 12, "Bhajji"));

        System.out.println(stu);

    }

}
Run Code Online (Sandbox Code Playgroud)

Student.java:

public class Student {

    public String name;

    public int id;

    public String email;

    Student() {

    }

    Student(String name, int id, String email) {

        this.name = name;
        this.id = id;
        this.email = email;

    }

     public String toString(){           //using these toString to avoid the output like this [com.steve.test.Student@6e1408, com.steve.test.Student@e53108]
          return name+" "+id+" "+email;     
         }  


    public String getName(){

        return name;
    }

    public void setName(String name){

        this.name=name;
    }

    public int getId(){

        return id;
    }

    public void setId(int id){

        this.id=id;
    }

    public String getEmail(){

        return email;

    }

    public void setEmail(String email){

        this.email=email;
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

[Steve 12 Daniel,Sachin 10 Tendulkar]

[Steve 12 Daniel,Sachin 10 Tendulkar,Yuvi 12 Bhajji]

如果你没有在Pojo(Student.java)类中使用toString(),你将获得类似的输出[com.steve.test.Student@6e1408, com.steve.test.Student@e53108].为了避免这些问题,我们使用toString()方法.