成都网站建设设计

将想法与焦点和您一起共享

Java字符串的递归过程解析

本篇内容介绍了“Java字符串的递归过程解析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

福清网站制作公司哪家好,找成都创新互联!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设公司等网站项目制作,到程序开发,运营维护。成都创新互联成立于2013年到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选成都创新互联

Java中的每个类基本上都继承自Object,标准容器类自然也不例外。因此容器类都有toString()方法,并且重写了该方法,使得它生成的String结果能够表达容器本身,以及容器所包含的对象。

例如ArrayList.toString(),它会遍历ArrayList中包含的所有对象,调用每个元素上的toString()方法:

public class Person {  private int age;    private String name;  public int getAge() {    return age;  }  public void setAge(int age) {    this.age = age;  }  public String getName() {    return name;  }  public void setName(String name) {    this.name = name;  }  public Person(int age, String name) {    super();    this.age = age;    this.name = name;  }  @Override  public String toString() {    return "Person [age=" + age + ", name=" + name + "]";  }  public static void main(String[] args) {    ArrayList persons = new ArrayList<>();    Person p1 = new Person(10, "张三");    Person p2 = new Person(12, "李四");    persons.add(p1);    persons.add(p2);    //(1)和(2)输出结果相同    System.out.println(persons);//(1)    System.out.println(persons.toString());//(2)  }}

输出结果为:

[Person [age=10, name=张三], Person [age=12, name=李四]][Person [age=10, name=张三], Person [age=12, name=李四]]

如果你希望toString()方法打印出对象的内存地址,也许你会考虑使用this关键字:

public class Person {    private int age;    private String name;  public int getAge() {    return age;  }  public void setAge(int age) {    this.age = age;  }  public String getName() {    return name;  }  public void setName(String name) {    this.name = name;  }  public Person(int age, String name) {    super();    this.age = age;    this.name = name;  }  @Override  public String toString() {    return "Person address:"+this;  }  public static void main(String[] args) {    ArrayList persons = new ArrayList<>();    Person p1 = new Person(10, "张三");    Person p2 = new Person(12, "李四");    persons.add(p1);    persons.add(p2);    System.out.println(persons);//(1)    System.out.println(persons.toString());//(2)  }}

当你创建了Person对象,并将其打印出来的时候,你会得到一串非常长的异常。如果你将该Person对象存入一个ArrayList中,然后打印该ArrayList,你也会得到同样的异常。其实,当如下代码运行时:

"Person address:" + this

这里发生了自动类型转换,有Person类型转换成String类型。因为编译器看到一个String对象后面跟着一个"+",而再后面的对象不是String,于是编译器试着将this转换成一个String。它怎么转换呢?正是通过调用this上的toString()方法,于是就发生了递归调用。

如果你真的想要打印出对象的内存地址,应该调用Object.toString()方法,这才是负责此任务的方法。所以,不能使用this,而是应该调用super.toString()方法。

即把上面的toString()方法改为:

@Override  public String toString() {    return "Person address:" + super.toString();  }

“Java字符串的递归过程解析”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!


网页名称:Java字符串的递归过程解析
标题来源:http://chengdu.cdxwcx.cn/article/ipesii.html