为了账号安全,请及时绑定邮箱和手机立即绑定

如何在不获取“SomeType @ 2f92e0f4”的情况下打印我的Java对象?

如何在不获取“SomeType @ 2f92e0f4”的情况下打印我的Java对象?

largeQ 2019-05-21 13:49:12
如何在不获取“SomeType @ 2f92e0f4”的情况下打印我的Java对象?我有一个类定义如下:public class Person {  private String name;  // constructor and getter/setter omitted}我试图打印我的班级实例:System.out.println(myPerson);但我得到了以下输出:com.foo.Person@2f92e0f4。当我尝试打印一个Person对象数组时发生了类似的事情:Person[] people = //...System.out.println(people); 我得到了输出: [Lcom.foo.Person;@28a418fc这个输出是什么意思?如何更改此输出以使其包含我的人名?我如何打印我的对象集合?
查看完整描述

6 回答

?
慕运维8079593

TA贡献1876条经验 获得超5个赞

我认为apache提供了一个更好的util类,它提供了获取字符串的函数

ReflectionToStringBuilder.toString(object)


查看完整回答
反对 回复 2019-05-21
?
莫回无

TA贡献1865条经验 获得超7个赞

在Eclipse中,转到您的班级,右键单击 - > source-> Generate toString();

它将覆盖该toString()方法并将打印该类的对象。


查看完整回答
反对 回复 2019-05-21
?
蓝山帝景

TA贡献1843条经验 获得超7个赞

默认情况下,Java中的每个Object都有toString()输出ObjectType @HashCode的方法。

如果您想要更有意义的信息,那么您需要覆盖toString()类中的方法。

public class Person {
  private String name;

  // constructor and getter/setter omitted

  // overridding toString() to print name
  public String toString(){
     return name;  
  }}

现在,当您使用System.out.prtinln(personObj);它打印person对象时,将打印该人的名称而不是classname和hashcode。

在第二种情况下,当您尝试打印数组时,它会打印[Lcom.foo.Person;@28a418fcArray类型及其哈希码。


如果要打印人名,有很多方法。

您可以编写自己的函数来迭代每个人并进行打印

void printPersonArray(Person[] persons){
    for(Person person: persons){
        System.out.println(person);
    }}

您可以使用Arrays.toString()打印它。这对我来说似乎最简单。

 System.out.println(Arrays.toString(persons));
 System.out.println(Arrays.deepToString(persons));  // for nested arrays

你可以用java 8方式打印它(使用流和方法引用)。

 Arrays.stream(persons).forEach(System.out::println);

可能还有其他方式。希望这可以帮助。:)


查看完整回答
反对 回复 2019-05-21
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

在intellij中,您可以通过按alt + inset自动生成toString方法,然后选择toString()这里是测试类的输出:

public class test  {int a;char b;String c;Test2 test2;@Overridepublic String toString() {
    return "test{" +
            "a=" + a +
            ", b=" + b +
            ", c='" + c + '\'' +
            ", test2=" + test2 +
            '}';
 }}

如您所见,它通过连接类的几个属性生成一个String,对于它将打印其值的基元,对于引用类型,它将使用它们的类类型(在本例中为Test2的字符串方法)。


查看完整回答
反对 回复 2019-05-21
  • 6 回答
  • 0 关注
  • 1205 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信