en Öyle gibi listemi initialize diyelim:Neden Kapsam dışı bir yöntemde bir Listeyi neden değiştirmeden değiştirebiliyorum?
public static void main(String[] args) {
ArrayList<String> a = new ArrayList<String>();
a.add("one");
a.add("two");
a.add("three");
a.add("four");
modifyList(a);
}
modifyList
basitçe her değeri değişir
"tek" şöyle:
private static void modifyList(ArrayList<String> a) {
for (int i = 0; i < a.size(); i++) {
a.set(i, "one");
}
}
ben bu yöntemi çağırmadan önce ve sonra listesini yazdırmak olursa Aynı orijinal listenin iki kez görünmesini beklerim. Ancak bazı nedenlerle, modifyList
'da değiştirilen ArrayList, main
'daki ArrayList ile aynıdır.
Aynı deneyi Ints ve Strings yerine Listeler yerine, yapmazsanız değiştirilir.
Nedenini açıklayabilir mi?
Eğer durum böyleyse, ints ve string kullandığımda, bir Tamsayı/String nesnesinin referansını değer yerine bir yönteme aktarmıyorum (aynı şekilde değerlerin yerine ArrayList referansını iletiyorum) ? –
Beklediğiniz gibi davranmayan denemelerin kodunu göstermelisiniz. Tamsayılar ve Tamsayılar arasında bir fark var, ona inanın ya da inanmayın (aslında ints ve Integers), ve açıklamanızdan kesin olarak ne yaptığınızı söyleyemeyiz. – arcy
Java temel öğeleri (int, float, bayt, char vb.) Ve Java nesneleri arasında (bir ilkel olarak ele alınan bir nesne olan String haricinde) bir fark vardır. Primitifler, değer ile geçirilir ve değişmezdir. İlkelleri değiştirmeyi denediğinizde, orijinal olanın yerine yeni bir değer yaratılır. Ancak nesneler, orijinal objeye atıfta bulunarak geçirilir, bu nedenle, üzerinde yapılan tüm değişiklikler orijinal değeri etkiler. – mmaarouf