A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 杨海波 于 2012-6-9 10:10 编辑

    String stu= "x+"y"   
    String stu=null;

       stu+="x";   
        stu+="y";  


       String stu = null;      

       StringBuffer buf = new StringBuffer();      

     buf.append("x");  
     buf.append("y");   

     stu = buf.toString();

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 加油吧~~

查看全部评分

5 个回复

倒序浏览
本帖最后由 王月 于 2012-6-7 20:54 编辑

lz写的有点乱啊,这是都在一个方法中吗,如果在一个方法里不能定义相同的局部变量啊。

你是想知道String和StringBeffer的区别吗,论坛有很多的,我就不写了。去看看这些吧

回复 使用道具 举报
① String tmp = "a" + "b" + "c";   
   String对象是final修饰的,所有不能被继承,任何字符串常量被赋值后都不能再修改,所以字符串常量是可以被共享的;创建String
   对象实例tmp,将三个字符串常量拼接赋值给tmp;  
② String tmp = null;      
        tmp+= "a";      
        tmp+= "b";   
        tmp+= "c";
//使用null为参数构造方法创建String对象tmp;
  依次将tmp和三个字符串常量进行拼接;   
    ③ String tmp = null;      
       StringBuffer buf = new StringBuffer();
      //StringBuffer顾名思义就是字符串缓冲区,开始时都有一定的容量;超过则自动分配;字符串串联是通过StringBuffer (或 StringBuilder)类及其 append 方法实现的;      
     buf.append("a");  
     buf.append("b");   
     buf.append("c");   
     tmp = buf.toString();
    //字符串转换是通过 toString 方法实现的,该方法由 Object 类定义,并可被 Java 中的所有类继承。

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 吴超 于 2012-6-7 21:15 编辑

1.String tmp = "a" + "b" + "c";      这步在编译的时候就已经完成累加,你可以看成是String tmp=“abc”;

2.String s = null,会被转为字符串null

3.
String tmp = null;      
       StringBuffer buf = new StringBuffer();      
     buf.append("a");  
     buf.append("b");   
     buf.append("c");   
     tmp = buf.toString();
结果是“abc”
你要知道String   定义的字符串,是不可改变的,而StringBuffer是可被修改的

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
我是这样理解的:当改变一个String类型对象的值时,都会导致一个新的String类型对象的生成。第1方法是在Java编译器编译的时候隐性实例化了StringBuffer 对象,把“a”“b”“c”添加到StringBuffer 里面然后返回一个字符串:String tmp=(new StringBuffer().append("a").append("b").append("c")).toString();第2种方法跟第1种差不多一样,只是他是先声明一个String tmp ,然后tmp+= "a"; Java编译器编译的时候也是隐性实例化了StringBuffer 对象,然后把"a"添加到 StringBuffer里面返回一个toString(),下面的加“b”“c” 跟加“a ”一样的。  第3中方法其实是把第1中方法细分了而已。
不知道我的看法大家是否认同,如理解有误,还请指点一下。

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 鼓励下,加油~~

查看全部评分

回复 使用道具 举报
区别很简单:
String的对象不可变
StringBuffer的对象是可变的。

你做的下面这些操作,创建了新的String对象,并将temp的指向指向了新对象
   tmp+= "a";      
   tmp+= "b";   
   tmp+= "c";   
你的下面的这些操作,一直是对一个对象操作,并没有创建新的对象
buf.append("a");  
buf.append("b");   
buf.append("c");   
tmp = buf.toString();
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马