2015-06-02 24 views
5

Tôi đã được làm câu hỏi trong cuốn sách lập trình của tôi và đã xem qua câu hỏi này:Thay đổi kích thước một mảng 2ngày trong java

đầu ra của đoạn mã sau là gì?

int[][] array = new int[5][6]; 
int[] x = {1, 2}; 
array[0] = x; 
System.out.println("array[0][1] is " + array[0][1]); 

Cuốn sách nói rằng câu trả lời là:

array [0] [1] là 2

Tôi đã học được cho đến nay mà thay đổi kích thước một mảng là không thể. Từ những gì tôi hiểu về vấn đề này là

int[][] array = new int[5][6] 

đang tạo ra 5 mảng của 6 yếu tố đó sẽ hiển thị 0 của theo mặc định nếu bạn hiển thị nó trên giao diện điều khiển

000000 
000000 
000000 
000000 
000000 

và bây giờ từ những gì tôi hiểu là

array[0] = x; 

về cơ bản là thay đổi kích thước các mảng đầu tiên trong đó có sáu yếu tố từ 0 vào một mảng với 2 yếu tố: 1 và 2.

Tôi không hiểu gì? Có phải đó là

array[0] = x; 

là làm cho nó thực sự chỉ thay đổi phần tử chỉ mục 0 và chỉ mục 1 phần tử của mảng đầu tiên? và giữ chỉ số 2,3,4,5 phần tử là 0 trong mảng [0]?

Tôi tìm thấy câu hỏi này Resize an Array while keeping current elements in Java? nhưng tôi không nghĩ rằng nó giúp tôi trả lời câu hỏi này.

Trả lời

10

Dòng này

array[0] = x; 

không được thay đổi kích thước mảng array[0]; nó thay thế các mảng array[0]array tại là

12 
000000 
000000 
000000 
000000 

Các cũ array[0] hiện đang bỏ đi và nó sẽ được thu gom rác. Bây giờ array[0]x tham chiếu cùng một đối tượng mảng, {1, 2}.

1
array[0]=x 

Đường này không thay đổi kích thước mảng .Đưa ra mảng [0] và x tham chiếu cùng một đối tượng. Để thực hiện ý tưởng của mình rõ ràng hơn tôi sẽ bao gồm một đoạn

 int[][] array = new int[5][6]; 
     System.out.println("Initial length"); 

     for(int i=0;i<array.length;i++) 
      System.out.println("length of array["+i+"] is " +array[i].length); 

     int[] x = {1, 2}; 
     array[0] = x;//This line makes array[0] and x to refer to the same object 

     System.out.println("After changes made"); 

     for(int i=0;i<array.length;i++) 
      System.out.println("length of array["+i+"] is " +array[i].length); 

     System.out.println("array[0][1]= "+array[0][1]); 
     //changing the content of object referred by x 

     x[0]=3; 
     x[1]=6; 

     System.out.println("After changing X"); 
     System.out.println("array[0][0]= "+array[0][0]+" array[0][1]="+array[0][1]); 

Output

Initial length 
length of array[0] is 6 
length of array[1] is 6 
length of array[2] is 6 
length of array[3] is 6 
length of array[4] is 6 

After changes made 

length of array[0] is 2 
length of array[1] is 6 
length of array[2] is 6 
length of array[3] is 6 
length of array[4] is 6 

array[0][1]= 2 

After changing content of object referred by x 

array[0][0]= 3 array[0][1]=6 

Vì vậy, bạn có thể quan sát rằng sau khi array[0]=x nếu bạn thay đổi nội dung của đối tượng được gọi bởi x sau đó thay đổi được quan sát thấy ở cả hai mảng mảng [0] và x bởi vì chúng đang đề cập đến cùng một đối tượng. Hy vọng điều này sẽ giúp bạn.

Các vấn đề liên quan