哪位大佬能解答一下这个问题吗


publicclassTest {
publicstaticvoidmain(String[] args) {
StringBuffer a = newStringBuffer("A");
StringBuffer b = newStringBuffer("B");
    operator(a, b); 
System.out.println(a + ","+ b);
}
publicstaticvoidoperator(StringBuffer x, StringBuffer y) {
x.append(y); y = x;
}
}
//哪位大佬能解释一下这个结果吗

全部评论
我觉得这就像C里的指针一样,传入方法里的x,y只是内存地址的引用,append是将内存里的内容改变了,而y=x是把y指向另一块内存了,但b还是指向原来那个。当然,我也不确定。
点赞 回复
分享
发布于 2019-03-07 22:37
嗯楼上说的对,operator方法结束之后x,y的引用就销毁了,y的引用指向x,但是已经销毁了所以对于a,b并没有影响。,append的话确实是加入了。
点赞 回复
分享
发布于 2019-03-07 22:54
滴滴
校招火热招聘中
官网直投
operator(StringBuffer x, StringBuffer y)这是个方法 operator(a, b);调用了这个方法,但是在方法里面操作的是a,b的引用x,y(我也不知道叫什么,叫指针也行吧,反正就那个意思) 然后x.append(y);是实实在在的改变了内存里面的东西的,就是a(x指向) y = x; 改变了y指向的“方向”,但是b还是那个b,在内存里没变 就是a,b是对象,把它们想象成整块的东西,x,y想象成指针(好蠢的理解。。) 应该是这样
点赞 回复
分享
发布于 2019-03-08 10:55
Java的值传递问题。个人理解,a 、b的值(即指向堆内存中对象的地址)分别传递(复制)给了x、y,之后operator() 方法与a、b 无关(不影响a、b的值)
点赞 回复
分享
发布于 2019-03-08 18:17

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务