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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© chuanyueing 中级黑马   /  2013-3-5 10:22  /  2304 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public class Demo0 {
  2. public static void main(String[] args){
  3.                 String s = "welcome";
  4.                 s += " to";
  5.                 s.concat(" java");//为什么没有连接上呢?   我的困惑之处;
  6.                    System.out.println(s);//输出 welcome to

  7.                 System.out.println(s.concat(" 2java"));
  8.                 //输出 welcome to 2java  ,这时候为什么就连接上了呢?
  9.          }
  10. }
复制代码

评分

参与人数 2技术分 +1 黑马币 +9 收起 理由
滔哥 + 1
贾文泽 + 9 神马都是浮云

查看全部评分

11 个回复

正序浏览
克零岚 发表于 2013-3-5 10:43
concat是String类的一个方法,返回值是String类型(public String concat(String str) ,意思是将指定字符 ...

:Q  人家喜欢技术分嘛  干嘛给金币
回复 使用道具 举报
看了一下上面的回答,都回答很正确,不过这个问题我以前也迷惑过,所以我再来解释一下吧:
class Demo {
        public static void main(String[] args) {
                String s = "welcome";
                s += " to";//这里如楼上所说,是创建了一个新的对象s ,而这个s的值是 welcome to
                               //接下来,你的代码是s.concat(" java"),这里意思是把 welcome to 连上java,这里其实又创建了一个新的对象
                //s = s.concat(" java");//注意我这里和你的源代码的区别,我在这里相当创建一个新对象,并把这个值赋给了S,打印S,就得到
                                //welcome to java,而你的代码s.concat("java")确实加了java,但这是一个新的对象,但是你并没有赋值给s,所以打印的结果当然是
                              //你之前的对象s 啊,也就是welcome to.
                                 s = s.concat(" java");
                System.out.println(s);//打印结果是welcome to java
                              
                System.out.println(s.concat(" 2java"));//至于这个,因为你打印的就是s.concat(" 2java")),当然能打印出来啊

        }
}

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
public class Demo0 {

public static void main(String[] args){

                String s = "welcome";

                s += " to";

                s = s.concat(" java");//此处加赋值语句

                   System.out.println(s);//输出 welcome to java

                System.out.println(s.concat(" 2java"));

                //输出 welcome to 2java  

         }

}
回复 使用道具 举报
邹学良 发表于 2013-3-5 11:21
String是静态数组类,一旦确定就无法加长,S+=“to"是新创建了一个S对象S,并不是楼上说的赋值
s.concat(" j ...

楼上说的赋值应该是指  s.concat(" java")没有赋值
回复 使用道具 举报
s.concat的值没有赋值给s,s变量原来的值还是welcome to,字符串只要一定义,就不能被改变
比如:就像你说的那个例子执行这个语句String s = "welcome",s指向常量池中的字符串"welcome",
执行s+="to"时,相当于welcome+to等于welcome to此时s为welcome to,原来的welcome字符串仍然在常量池中,没被对象引用了,执行下面的代码也是同样的道理。
回复 使用道具 举报
刚开始的时候我也有这样的疑惑 在java中这样的例子不止这一个 ,一般这种方法是说的他们的返回值 是他们做了改变后的结果,而不是在原来对象上做改变。原因是 能体会到就是说不出来的感觉。慢慢体会吧。
回复 使用道具 举报
本帖最后由 邹学良 于 2013-3-5 11:24 编辑

String是静态数组类,一旦确定就无法加长,S+=“to"是新创建了一个S对象S,并不是楼上说的赋值
s.concat(" java")只有方法执行但并没有让去接收返回值
s.concat(" 2java")相当于新创建对象 Strint S= new String(原来的对象S+“2java"),打印的是新建对象
回复 使用道具 举报
同学回答的没错,我就没说的了
回复 使用道具 举报
concat是String类的一个方法,返回值是String类型(public String concat(String str) ,意思是将指定字符串连接到此字符串的结尾,创建一个新的字符串
你程序里的 s.concat(" java")并没有接收方法返回来的字符串,所以你输出的s还是原来的字符串"welcome";而System.out.println(s.concat(" 2java"))可以,那是因为System.out.println()接收了方法返回来的新字符串,打印的是新字符串。

评分

参与人数 2技术分 +1 黑马币 +9 收起 理由
滔哥 + 1
贾文泽 + 9 赞一个!

查看全部评分

回复 使用道具 举报
System.out.println(s);

这句输出的是s

而s只是 welcome to

s.concat(" java");这句并没有赋给s

改成s = s.concat(" java");  就好了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马