# 物件住在哪裡?
###### 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;
}
}
```