Giải thích giúp đoạn code liên quan đến độ dài của ArrayList

Hi there ! mình gặp vấn đề ở biến abc dòng số 4 và biến abc ở trong dòng for !

1. ArrayList list=newArrayList();
2.  list.add(6);
3.  list.add(1);
4.  int abc = list.size();
5.  for (int i = 0; i < abc; i++) 
6.        list.add(i);
7.  System.out.println(list);

mình nghĩ nó là là cùng một ô nhớ nên khi list.add(i) thì size() tăng nên biến abc ở dòng 4 tăng và abc trong dòng for cũng thay đổi theo vì vậy sẽ tạo thành vòng for vô cực tràn bộ nhớ. nhưng khi test trong IDE thì abc = list.size() = 2. và nó không thay đổi khi size() của list tăng. cảm ơn mọi người !

Đơn giản: vì int là tham trị. size() trả về giá trị là bản sao của biến bên trong ArrayList.

Giá trị của abc nằm ô nhớ độc lập, không liên quan đến size().

Trong Java, các kiểu nguyên thủy (trừ String) đều là tham trị; các kiểu đối tượng (tạo bằng từ khóa new) đều là tham chiếu. String là kiểu đặc biệt nhất trong Java.

3 Likes

String là kiểu Object. Nên nói thế có khi bạn ấy lại hiểu nhầm. Mình nghĩ nói thế này thì dễ hiểu hơn, mặc dù không đúng:

Đối với các kiểu nguyên thuỷ và String, các phép toán (bao gồm cả phép return) trả về dữ liệu.
Đối với các kiểu dữ liệu Object, các phép trả về Object (đối tượng) là box chứa dữ liệu.

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?