9 回答
TA贡献46条经验 获得超27个赞
Java里只有按值传递,没有按引用传递,之所以传递对象后能可改变这个对象的属性,是因为在方法中,传递的是一个该对象的副本,然后这个副本指向的是该传递过来的对象所指向的堆内存中的对象,所以,修改了副本所指向的属性同样会修改原始对象的属性,但是,当使用new时,副本和对象不再指向同一个地址,副本指向了一个新的地址,传入的参数还是指向原来的地址,所以,楼主这题里虽然在initUser中初始化了User对象,但是只是在这个initUser中user不是空的,传递过来的user依然是空的,也就是并没有初始化外面addUser函数里的user对象,所以会空指针异常
TA贡献1条经验 获得超3个赞
java中,方法的参数是值传递,在initUser方法中,将user对象的地址赋值给了initUser中参数user,现在他们指向同一片地址。然而,方法initUser的参数在方法中又指向了另一地址,实际的user对象的地址依旧没变,仍然为null。
TA贡献1条经验 获得超0个赞
java中的参数传递 其实相当于一种赋值,如果是基本类型就是直接赋值,如果是引用类型就是把引用赋给形参,如上题,在addUser方法中 user 虽然是null,但是传递给initUser方法的时候他是实参,相当于将这个实参的引用赋给了initUser方法的形参 user,说白了 就是initUser方法的形参user指向了addUser方法里面的user(也就是指向了null),然后呢,在initUser方法里面,把形参user又指向了新的引用 new User(),这里的指向 和addUser方法里面的user没有一点关系,那个user还是指向null
TA贡献1条经验 获得超0个赞
使用对象作为参数传递的是对象的引用!!只有String作为参数例外!!
initUser(User user){
user=new User();
}
这个参数传递的只是null对象的引用,而user=new User()这句话已经将user指向了一个新的对象;
且这里的user参数和外面的user是不一样的,inituser(User user)里的user作用域就只是这个函数,所以外面那个user依旧指向了一个空的实例;
TA贡献3条经验 获得超0个赞
User user = null;的user 跟 initUser(User user)方法的user参数不是同一个栈上面的局部变量。
也就是方法里面只是给参数user这个局部变量赋值而已,当initUser方法退出时,参数user局部变量也就没了。
添加回答
举报