将java对象输出为字符串的不同方法及实例教程

401 阅读4分钟

在这篇博文中,我们将通过实例学习将对象内容打印成字符串

一个Java类是一组属性和方法,它是一个对象的蓝图。一个对象是用java中的类创建的。

当项目开发过程中出现问题时,必须将java对象打印到控制台,以检查实际值,以便进一步调试。默认情况下,如果你使用System.out.println或logger语句打印一个对象,它显示的格式为packagename.classname@hashcode

如果User.java类在com.mycompany中声明:

package com.mycompany;
public class User {
 private String name;

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

如果你打印上述类的对象,其输出如下

com.mycompany.User@8e61f1a2

这对对象值的调试没有帮助。

如何在没有com.mycompany.User@8e61f1a2的情况下打印java对象内容?

这篇文章涵盖了显示java对象内容的多种方法。

  • Java.lang.Object toString()方法

如何使用toString()方法打印Java对象

Java.lang.Object是java语言中所有其他类的基类,所以每个java类都默认扩展了这个类。

toString() toString()是java.lang.object类中的一个方法,所有java类默认都有这个方法,你可以在自定义类中覆盖这个方法。

如果你用toString()方法调用任何对象,它只是给出类的名称+@符号+该类的哈希代码。

我们不会得到任何有用的信息来检查一个对象的数据。默认情况下,当你打印一个对象或object.toString()方法时,它总是给出类的哈希代码,如下所示。

这个类没有提供toString()方法的实现。它调用 java.lang.object.toString() 行为。

public class Employee {  
  
 private Integer id;  
 private String name;  
 public Employee(String name) {  
  this.name=name;  
 }  
 public Integer getId() {  
  return id;  
 }  
 public void setId(Integer id) {  
  this.id = id;  
 }  
 public String getName() {  
  return name;  
 }  
 public void setName(String name) {  
  this.name = name;  
 }  
  
}  
Employee emp=new Employee();  
System.out.println(emp);  
System.out.printl/n(emp.toString());  

输出是

Employee@1517365b  
Employee@1517365b  

使用自定义的toString()方法将对象内容打印成字符串。

重载toString()方法以包括所有你想打印到控制台的字段。下面这个例子解释了

  • 如何重写toString()方法来打印对象 - toString()方法
  • 如何将java对象打印成一个字符串对象
public class Employee {  
  
 -----------------  
@Override  
 public String toString() {  
  return "Employee("+name+")";  
 }  
}  
Employee emp=new Employee();  
 emp.setName("kiran");  
 System.out.println(emp);  
 System.out.println(emp.toString());  

输出是

Employee@1517365b  
Employee@1517365b  

Java数组对象打印示例

如果有一个由多个对象组成的数组,需要打印所有的对象。迭代每个对象并打印只是为了调试的目的,这看起来不是很好。
下面的例子解释了

  • 如何打印单个数组对象 - Arrays.toString() 方法
  • 如何打印一个多维的对象数组Arrays.deepToString() 方法

Arrays.toString()方法 - 返回数组中每个对象的字符串表示 Arrays.deepToString()方法 - 返回多维数组中每个对象的字符串表示 - 数组元素包含一个数组的元素

import java.util.Arrays;  
public class EmployeeTest {  
  
 public static void main(String[] args) {  
  Employee[] emps = { new Employee("Kiran"), new Employee("John") };  
  System.out.println("java Array of  Object print example");  
  System.out.println(Arrays.toString(emps));  
  
  System.out.println("java multi dimensional Array of Objects print example");  
  Employee[][] emps1 = new Employee[2][2];  
  emps1[0][0] = new Employee("one");  
  emps1[0][1] = new Employee("two");  
  emps1[1][0] = new Employee("three");  
  emps1[1][1] = new Employee("foour");  
  System.out.println(Arrays.deepToString(emps1));  
  
 }  
  
}  

输出是

java Array of  Object print example  
[Employee(Kiran), Employee(John)]  
java multi dimensional Array of Objects print example  
[[Employee(one), Employee(two)], [Employee(three), Employee(foour)]]  

对象集合的打印示例

集合可以是set、Map和List。当你打印集合对象到控制台时,它将对每个元素调用toString()。
下面这个例子解释了

  • 如何打印对象的数组列表到控制台
  • 如何打印对象的集合到控制台
  • 如何打印对象的Map到控制台
import java.util.ArrayList;  
import java.util.HashMap;  
import java.util.HashSet;  
import java.util.List;  
import java.util.Map;  
import java.util.Set;  
  
public class EmployeeTest {  
  
 public static void main(String[] args) {  
  
  System.out.println("java ArrayList of Objects print example");  
  List empList = new ArrayList<>();  
  empList.add(new Employee("one"));  
  empList.add(new Employee("two"));  
  System.out.println(empList);  
  
  System.out.println("java Set of Objects print example");  
  Set empSet = new HashSet<>();  
  empSet.add(new Employee("three"));  
  empSet.add(new Employee("four"));  
  System.out.println(empSet);  
  
  System.out.println("java Map of Objects print example");  
  Map empMap = new HashMap();  
  empMap.put(1, new Employee("five"));  
  empMap.put(2, new Employee("six"));  
  System.out.println(empMap);  
 }  
  
}

输出是

java ArrayList of Objects print example  
[Employee(one), Employee(two)]  
java Set of Objects print example  
[Employee(three), Employee(four)]  
java Map of Objects print example  
{1=Employee(five), 2=Employee(six)}  

ToStringBuilder类--将一个java对象的所有字段打印成字符串

ToStringBuilder类定义了apache commons库
ToStringBuilder.reflectToString方法使用ToStringStyle.SHORT_PREFIX_STYLE将一个java对象的所有字段打印成字符串,使用
ToStringStyle.JSON_STYLE类将其打印成JSON。
下面这些例子解释了

  • 如何将java对象的所有字段打印成字符串 - toStringStyle.SHORT_PREFIX_STYLE
  • 如何将java对象打印成JSON字符串 - ToStringStyle.JSON_STYLE
public class Employee {  
  
 @Override  
  public String toString () {  
     return ToStringBuilder.reflectionToString(this,ToStringStyle.SHORT_PREFIX_STYLE);  
   }  
   
  public String toJson () {  
     return ToStringBuilder.reflectionToString(this,ToStringStyle.JSON_STYLE);  
   }  
}  
  
  
Employee emp = new Employee("one");  
  System.out.println(emp.toString());  
  System.out.println(emp.toJson());  

输出

Employee[name=Kiran,id=1]  
  {"name": "Kiran", "id": 1}