Java 中的一些小问题~
假如有类A;A有个变量,Bb=newB();生成A的一个对象Aa=newA();然后a=null;那么,b是null吗;...
假如有类A;
A有个变量,B b=new B();
生成A的一个对象A a = new A();
然后a=null;
那么,b是null吗; 展开
A有个变量,B b=new B();
生成A的一个对象A a = new A();
然后a=null;
那么,b是null吗; 展开
展开全部
如果你了解它们在内存里的关系就会懂了
A里有个对象B
A a = new A()时,里面的b也new了,这时内存堆里有两个实例,内存栈里有两个引用分别指向堆里的两个实例,
如果你把a的引用指向了null,对于你的问题b是否会等于null,这有两种情况
一种是:实例a被一个以上的引用指向,a是其中一个,如果a指向了null,但是实例a还有其他引用指向,b不会等于null
第二种是:实例a只有一个引用指向,当你把这个引用指向null后,那么实例就没有引用指向它了,那么java的垃圾回收器就会把实例a这个销毁,当然里面的b也会销毁,但是,如果里面的实例b在外部还有其他的引用指向的话,那么b也还是会存在
这个要自己慢慢做实验来了解比较好
向你上面的程序,你把a指向null,那么你要怎么访问b?调用a.getB()不就出现NullPointerException了吗
但是你可以这样
A a = new A();
A a1 = a;
a = null;
a1.getB();你看b是不会为空的
A里有个对象B
A a = new A()时,里面的b也new了,这时内存堆里有两个实例,内存栈里有两个引用分别指向堆里的两个实例,
如果你把a的引用指向了null,对于你的问题b是否会等于null,这有两种情况
一种是:实例a被一个以上的引用指向,a是其中一个,如果a指向了null,但是实例a还有其他引用指向,b不会等于null
第二种是:实例a只有一个引用指向,当你把这个引用指向null后,那么实例就没有引用指向它了,那么java的垃圾回收器就会把实例a这个销毁,当然里面的b也会销毁,但是,如果里面的实例b在外部还有其他的引用指向的话,那么b也还是会存在
这个要自己慢慢做实验来了解比较好
向你上面的程序,你把a指向null,那么你要怎么访问b?调用a.getB()不就出现NullPointerException了吗
但是你可以这样
A a = new A();
A a1 = a;
a = null;
a1.getB();你看b是不会为空的
展开全部
你这么说的话,也有个类是B呀?
a和b分别为两个指针,这么会有关系呢?
a和b分别为两个指针,这么会有关系呢?
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
b不是null,因为已经new了一个实例给b
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
刚编了个程序实验了一下。
s不等于Null
代码如下:
public class T
{
S s;
T()
{
s=new S();
}
public static void main(String[]args)
{
T t=new T();
t=null; //可以自己设置。然后运行。看s调用它中的函数
s.show();
}
}
class S
{
public void show()
{
System.out.println("NOT NULL");
}
}
希望对你有帮助
s不等于Null
代码如下:
public class T
{
S s;
T()
{
s=new S();
}
public static void main(String[]args)
{
T t=new T();
t=null; //可以自己设置。然后运行。看s调用它中的函数
s.show();
}
}
class S
{
public void show()
{
System.out.println("NOT NULL");
}
}
希望对你有帮助
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
b指向的对象已经取不到了。会被垃圾回收的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先我要问一句:a=null后,你要如何访问b?
如果对象A的引用只有a的话,a=null后你是访问不到b的。
当然,如果你通过其他对象A的引用,或者直接到内存上去读取b的话,你会发现b不是null。
比如下面的例子就是把a传给c来访问b的
class A{
public B b = new B();
public static void main(String[] args){
A a = new A();
A c = a;
a= null;
if(c.b != null) System.out.println("true");
}
class B{}
}
如果对象A的引用只有a的话,a=null后你是访问不到b的。
当然,如果你通过其他对象A的引用,或者直接到内存上去读取b的话,你会发现b不是null。
比如下面的例子就是把a传给c来访问b的
class A{
public B b = new B();
public static void main(String[] args){
A a = new A();
A c = a;
a= null;
if(c.b != null) System.out.println("true");
}
class B{}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询