StringBuffer问题

J2EE 码拜 10年前 (2015-04-17) 1046次浏览 0个评论
 

public class Foo {
       public static void main(String[] args) {
              StringBuffer a=new StringBuffer(“A”);
              StringBuffer b=new StringBuffer(“B”);
              operator(a,b);
              System.out.println(a+”,”+b);
       }
       public static void operator(StringBuffer x,StringBuffer y){
              x.append(y);
              y=x;//
       }
}
为什么返回结果是AB,B

StringBuffer问题
4分
y=x;
这一句没有任何意义,这只是改变了局部变量的指向,并没有修改哪一个对象,所以对外部无影响。

而且永远不要对局部变量进行赋值操作(如a = b),尽量不要修改局部变量的值(如a++),除非你200%地清楚你在干什么,并且这样做非常必要。

StringBuffer问题
12分
public static void operator(StringBuffer x,StringBuffer y){
               // x 的拷贝变为了AB,x 的拷贝和x 指向同一个内存地址,所以x 变为了AB
              x.append(y); 
               //  y 的拷贝指向了x 的拷贝的地址,也就是x 的地址,那么y 的拷贝将不再影响y 的指向
              //  所以 y 的值依然为B 
              y=x;                
}

记着一点就行了,java传递的是拷贝,在方法内改变了拷贝的指向,那么后面做的任何事情都不影响原值了
如果在 y=x; 后再添加一行 y.append(“hello”); 那么a 的值就变为 ABhello 了 

StringBuffer问题
java中只有传值,后面的y=x 相当于y引用了x的位置 但没有改变值
StringBuffer问题
4分
我是这样理解的:
public class Foo {
       public static void main(String[] args) {
              StringBuffer a=new StringBuffer(“A”);     //开辟一块内存   id=21
              StringBuffer b=new StringBuffer(“B”);    //开辟一块内存   id=25
              operator(a,b);
              System.out.println(a+”,”+b);                    //打印出来内容是  内存地址的存放内容
       }
       //注意了。id21,id25两个StringBuffer传过来
       public static void operator(StringBuffer x,StringBuffer y){
              x.append(y);                                                //这个操作,id21的值变成了‘AB’       
              // y.append(x);           在y=x既是改变y的id之前,你试试 ,输出不一样哦          
              y=x;                                                               //这个操作,把y的id由id25变成id21,之后操作y也不会改变id25的值
             // y.append(x);            在y=x既是改变y的id之后,你试试 ,输出不一样哦        
       }
}

建议:多理解基础,这都是原理的东西

StringBuffer问题
引用 2 楼 magi1201 的回复:
public static void operator(StringBuffer x,StringBuffer y){
               // x 的拷贝变为了AB,x 的拷贝和x 指向同一个内存地址,所以x 变为了AB
              x.append(y); 
               //  y 的拷贝指向了x 的拷贝的地址,也就是x 的地址,那么y 的拷贝将不再影响y 的指向
              //  所以 y 的值依然为B 
              y=x;                
}

记着一点就行了,java传递的是拷贝,在方法内改变了拷贝的指向,那么后面做的任何事情都不影响原值了
如果在 y=x; 后再添加一行 y.append(“hello”); 那么a 的值就变为 ABhello 了 

明白 了,就是传值 的时候只是原对象的一份拷贝,拷贝的指向并不会改变原对象的指向


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明StringBuffer问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!