乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Java字符串無意識的遞歸

       印度阿三17 2019-09-07

      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<Person> 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<Person> 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)
          }
      }

      當你創(chuàng)建了Person對象,并將其打印出來的時候,你會得到一串非常長的異常。如果你將該Person對象存入一個ArrayList中,然后打印該ArrayList,你也會得到同樣的異常。其實,當如下代碼運行時:

      "Person address:" this

      這里發(fā)生了自動類型轉換,有Person類型轉換成String類型。因為編譯器看到一個String對象后面跟著一個" ",而再后面的對象不是String,于是編譯器試著將this轉換成一個String。它怎么轉換呢?正是通過調用this上的toString()方法,于是就發(fā)生了遞歸調用

      如果你真的想要打印出對象的內存地址,應該調用Object.toString()方法,這才是負責此任務的方法。所以,不能使用this,而是應該調用super.toString()方法。

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

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

        本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多