java对象数组的动态初始化问题
在对象数组的动态初始化方法时先开辟了空间即例如:Personper[]=newPerson[3];而在对单个对象进行赋值时再次用到关键字new即如:per[0]=newP...
在对象数组的动态初始化方法时先开辟了空间
即例如:Person per[ ] = new Person[ 3 ];
而在对单个对象进行赋值时再次用到关键字new
即如: per[ 0 ] = new Person("张三");
// Person("张三") 为已构造好的构造函数,这里不考虑任何语法问题; 此句为per[ 0 ]的某个属性进行赋值为“张三”的操作
那么我想问的是:根据我的理解,Person类里对象per[0]中的name属性为String是不可改变其内容的;在第一次new执行申请出一个per[0]的空间时,其name值为null, 在第二次new执行对name内容的赋值是否将per[0].name的内存指向改变? 即"null"和“张三” 并非同一块空间,也就是说per[0].name的参数修改涉及到了两块String内存空间? 展开
即例如:Person per[ ] = new Person[ 3 ];
而在对单个对象进行赋值时再次用到关键字new
即如: per[ 0 ] = new Person("张三");
// Person("张三") 为已构造好的构造函数,这里不考虑任何语法问题; 此句为per[ 0 ]的某个属性进行赋值为“张三”的操作
那么我想问的是:根据我的理解,Person类里对象per[0]中的name属性为String是不可改变其内容的;在第一次new执行申请出一个per[0]的空间时,其name值为null, 在第二次new执行对name内容的赋值是否将per[0].name的内存指向改变? 即"null"和“张三” 并非同一块空间,也就是说per[0].name的参数修改涉及到了两块String内存空间? 展开
1个回答
展开全部
我的理解时这样的:
当Person per[] = new Person[3];这句代码执行时,系统会申明一个数组变量,并指向三个地址,但是地址中是没有值的。
per[0] = new Person("张三");当执行到这句代码时,系统会将其中数组地址中索引为0的地址赋值,值为对象(Person('张三')),而并不是String内存空间。
并且你贴出来的这两句代码中只会执行一次new操作
也就是只会为其中一个对象的name赋值字符串“张三”
我觉得不会涉及到两块String内存空间
当Person per[] = new Person[3];这句代码执行时,系统会申明一个数组变量,并指向三个地址,但是地址中是没有值的。
per[0] = new Person("张三");当执行到这句代码时,系统会将其中数组地址中索引为0的地址赋值,值为对象(Person('张三')),而并不是String内存空间。
并且你贴出来的这两句代码中只会执行一次new操作
也就是只会为其中一个对象的name赋值字符串“张三”
我觉得不会涉及到两块String内存空间
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询