class A
{
int x;
A(int i)
{
x=i;
}
A method1()
{
A aTemp=new A(x+10);
return aTemp;
}
}class Test9
{
public static void main(String args[])
{
A a1=new A(0);
A a2=new A(0);
a1=a2.method1();
System.out.println("a1.x="+a1.x);
a2=a1.method1();
System.out.println("a2.x="+a2.x);
a1=a2.method1();
System.out.println("a1.x="+a1.x);
a2=a1.method1();
System.out.println("a2.x="+a2.x);
}
}
上面method1()返回一个临时对象,当赋给a1时,a1就是这个临时对象的引用了吗?那原来a1的内存是不是就自动回收了?那反复调用method1()赋值的话a1和a2的地址是不是一直在变?原来学过C++,刚一接触java对于这类的对象引用不是很清楚,尤其是java的自动内存回收,希望有高手给解释一下,最好系统点。对了,顺便问下java中是不是不能得到变量或者对象的地址的?
{
int x;
A(int i)
{
x=i;
}
A method1()
{
A aTemp=new A(x+10);
return aTemp;
}
}class Test9
{
public static void main(String args[])
{
A a1=new A(0);
A a2=new A(0);
a1=a2.method1();
System.out.println("a1.x="+a1.x);
a2=a1.method1();
System.out.println("a2.x="+a2.x);
a1=a2.method1();
System.out.println("a1.x="+a1.x);
a2=a1.method1();
System.out.println("a2.x="+a2.x);
}
}
上面method1()返回一个临时对象,当赋给a1时,a1就是这个临时对象的引用了吗?那原来a1的内存是不是就自动回收了?那反复调用method1()赋值的话a1和a2的地址是不是一直在变?原来学过C++,刚一接触java对于这类的对象引用不是很清楚,尤其是java的自动内存回收,希望有高手给解释一下,最好系统点。对了,顺便问下java中是不是不能得到变量或者对象的地址的?
{
int x;
A(int i)
{
x=i;
}
A method1()
{
A aTemp=new A(x+10);
return aTemp;
}
} class Test9
{
public static void main(String args[])
{
A a1=new A(0);
A a2=new A(0);
a1=a2.method1();
System.out.println("a1.x="+a1.x);
a2=a1.method1();
System.out.println("a2.x="+a2.x);
a1=a2.method1();
System.out.println("a1.x="+a1.x);
a2=a1.method1();
System.out.println("a2.x="+a2.x);
}
}
a1原来指向的对象如果没有引用指向的话是会自动回收的,但是GC什么时候来回收就不知道了,
反复赋值地址会变,因为你每次都是产生了新的对象,然后将a1和a2指向这个新对象
java中只能得到对象的hashcode,可以认为作用和地址一样,但它不是真实的物理地址,应该是处于JVM管理下的地址