Eu ainda não percebi bem.
O exemplo completo está nas classes abaixo.
1 - eu entendo o First test.
2 - eu pensava que quando passamos um objecto ou uma variável, passamos cópia do objecto e uma cópia da variável. No ponto respeitante ao da variável (ver o third test) eu compreendo perfeitamente. Passa-se uma cópia da variável para dentro do método.
No que diz respeito ao objecto, eu percebo quando dizem que se está a passar uma cópia da referência que está a apontar para o objecto. Se isto é verdado, o que se passa com o Fourth test, em que estou à espera de ver o resultado 1, e continuo obter o 0?
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class Mapping {
// First test
public void mapping1()
{
Map map = new HashMap();
Map subMap = new HashMap();
map.put("first", subMap);
subMap.put("SubMap", "Second");
Map secondMap = (Map) map.get("first");
Collection col = secondMap.values();
Iterator iter = col.iterator();
while(iter.hasNext())
{
System.out.println("String - " + (String) iter.next());
}
}
//-------------------------------------
// Second test
public void mapping2()
{
Map map = new HashMap();
Map subMap = new HashMap();
map.put("first", subMap);
secondMap(subMap);
Map secondMap = (Map) map.get("first");
Collection col = secondMap.values();
Iterator iter = col.iterator();
while(iter.hasNext())
{
System.out.println("String - " + (String) iter.next());
}
}
public void secondMap(Map dest)
{
dest.put("SubMap", "Second");
}
//-----------------------------------
// third test
public void mapping3()
{
int i = 0;
add(i);
System.out.println(i);
}
public void add(int i)
{
i++;
}
// -----------------------------------
// fourth test
public void mapping4(){
Counter c = new Counter();
add(c);
System.out.println("Counter: " + c.getI());
}
public void add(Counter counter)
{
counter.setI(counter.getI()+1);
}
//-----------------------------------------
public static void main(String[] args) {
System.out.println("First Test");
new Mapping().mapping1();
System.out.println("Second Test");
new Mapping().mapping2();
System.out.println("Third Test");
new Mapping().mapping3();
System.out.println("Fourth Test");
new Mapping().mapping4();
}
}
public class Counter {
int i = 0;
public int getI()
{
return i;
}
public int setI(int i)
{
return i;
}
}
Output:
First Test
String - Second
Second Test
String - Second
Third Test
0
Fourth Test
Counter: 0
Obrigado,
Pedro