首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

一个赋值的有关问题。初学者问大侠

2012-03-08 
一个赋值的问题。菜鸟问大侠classNumber{inti}publicclassAssignment{publicstaticvoidmain(Sting[]args){

一个赋值的问题。菜鸟问大侠
class   Number{
int   i;
}

public   class   Assignment{
public   static   void   main(Sting   []   args){
Number   n1=   new   Number();
Number   n2=   new   Number();
n1.i=8;
n2.i=48;
System.out.println( "1:n1.i: "+n1.i+ "n2.i: "+n2.i);
n1=n2;
System.out.println( "1:n1.i: "+n1.i+ "n2.i: "+n2.i);
n1.i=24;
System.out.println( "1:n1.i: "+n1.i+ "n2.i: "+n2.i);     //这里不明白

问题是这里只是把n1.i赋值怎么会改变n2.i的值呢。

[解决办法]
Java中所有的变量名都是引用,要么为null,要么引用着堆中动态分配着的对象。你的这一句:
n1=n2;
导致n1和n2这两个变量引用到同一个对象上去了,就是原来n2引用着的那个。
原来被变量n1引用着的对象成为垃圾,可随时被垃圾回收器收掉了。

[解决办法]
因为你把n1=n2了
这样n1和n2指向的是同一块内存地址,即这个时候n1和n2已经是同一个对象了,你操作n1就等于是操作n2了,而你这个时候在执行下一句代码 "n1.i=24 "
就等于是在操作n2了,所以n2值也改变了
给分吧,朋友,我实在没分了

热点排行