# 物件住在哪裡? ###### tags: `NTU-CE` `Computer Programming` `Java` `Programming Language` 每當我們創建物件時其實我們是在幫一堆位元資料找一個家安置,而那個家就是俗稱的記憶體位置。 Object o = new Object(); 以下示範物件何時會隨著「=」搬家: After tmpLine = lines[i - 1]; Temporary Line is at Line2D@6d06d69c Indexed Line is at Line2D@6d06d69c After lines[i - 1] = lines[j]; Temporary Line is at Line2D@6d06d69c Indexed Line is at Line2D@7852e922 After tmpLine = lines[i - 1]; Temporary Line is at Line2D@4e25154f Indexed Line is at Line2D@4e25154f After lines[i - 1] = lines[j]; Temporary Line is at Line2D@4e25154f Indexed Line is at Line2D@6d06d69c After tmpLine = lines[i - 1]; Temporary Line is at Line2D@4e25154f Indexed Line is at Line2D@4e25154f After lines[i - 1] = lines[j]; Temporary Line is at Line2D@4e25154f Indexed Line is at Line2D@70dea4e After tmpLine = lines[i - 1]; Temporary Line is at Line2D@4e25154f Indexed Line is at Line2D@4e25154f After lines[i - 1] = lines[j]; Temporary Line is at Line2D@4e25154f Indexed Line is at Line2D@5c647e05 After tmpLine = lines[i - 1]; Temporary Line is at Line2D@4e25154f Indexed Line is at Line2D@4e25154f After lines[i - 1] = lines[j]; Temporary Line is at Line2D@4e25154f Indexed Line is at Line2D@4e25154f 直接看碼: ``` public class TestLine2D { public static void main(String[] args) { Line2D[] lines = new Line2D[5]; for (int i = 0; i < lines.length; i++) { lines[i] = new Line2D(Math.random() * 10, Math.random() * 10, Math.random() * 10, Math.random() * 10); } printInShuffle(lines); } public static void printInSequence(Line2D[] lines){ for(Line2D line: lines){ System.out.print(" " + line.getLength()); } System.out.print("\n"); } public static void printInShuffle(Line2D[] lines){ Line2D tmpLine; for(int i = lines.length ; i >= 1 ; i--){ int j = (int)(Math.random() * i); tmpLine = lines[i - 1]; System.out.println("After tmpLine = lines[i - 1];"); System.out.println("Temporary Line is at " + tmpLine); System.out.println("Indexed Line is at " + lines[i-1]); lines[i - 1] = lines[j]; System.out.println("After lines[i - 1] = lines[j];"); System.out.println("Temporary Line is at " + tmpLine); System.out.println("Indexed Line is at " + lines[i-1]); lines[j] = tmpLine; } } } class Line2D { private double x1; private double y1; private double x2; private double y2; private double length; Line2D(double x1, double y1, double x2, double y2){ this.x1 = x1; this.y1 = y1; this.x2 = x2; this.y2 = y2; this.length = Math.sqrt(Math.pow(y2-y1, 2) + Math.pow(x2-x1, 2)); } public double getLength(){ return this.length; } } ```