iT邦幫忙

2022 iThome 鐵人賽

DAY 14
0
自我挑戰組

寫寫歷年職場經歷過的大小事或近期所學習的知識啟發系列 第 14

為甚麼char的array輸出的不是Memory Address

  • 分享至 

  • xImage
  •  

一般直觀array如果直接使用System.out.println(aryName);

會印出array在memory address

但忽然發現char[] 竟然會直接印出array內的元素

好奇使然發現print中竟把char[]跟其他array(Object)切分開
https://ithelp.ithome.com.tw/upload/images/20220914/20151917boyUN6ay2G.png

    public void print(char s[]) {
        write(s);
    }
    
    private void write(char[] buf) {
        try {
            synchronized (this) {
                ensureOpen();
                textOut.write(buf);
                textOut.flushBuffer();
                charOut.flushBuffer();
                if (autoFlush) {
                    for (int i = 0; i < buf.length; i++)
                        if (buf[i] == '\n') {
                            out.flush();
                            break;
                        }
                }
            }
        } catch (InterruptedIOException x) {
            Thread.currentThread().interrupt();
        } catch (IOException x) {
            trouble = true;
        }
    }
    public void print(Object obj) {
        write(String.valueOf(obj));
    }
    
    public static String valueOf(Object obj) {
        return (obj == null) ? "null" : obj.toString();
    }
    
    public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }

看起來是使用的write方法所傳入的實際參數不同,但如果把city強制轉型為字串(前方加" "、toString()),就會變成輸出memory address

import java.util.Arrays;

public class ArrayOperate2 {
  public static void main(String[] args) {
      char [] city = {'D','B','A'};
      System.out.println(city);                          // DBA
      System.out.println(" "+city);                      //  [C@5fd0d5ae
      System.out.println(" "+ new String(city));         //  DBA
      System.out.println(" "+city.toString());           //  [C@5fd0d5ae
      System.out.println(city.toString());               // [C@5fd0d5ae
      System.out.println(Arrays.toString(city));         // [D, B, A]
  }
}

今天發現這事覺得真有趣,最近在看SOLID設計原則,它帶給我對敏捷開發有不一樣看法,顛覆我對字面解讀


上一篇
SQL | 神奇EXISTS
下一篇
由前置時間來看軟體開發
系列文
寫寫歷年職場經歷過的大小事或近期所學習的知識啟發30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言