黑马程序员技术交流社区

标题: 借用隔壁的一道题,关于String的 [打印本页]

作者: IDhmpj    时间: 2015-4-30 23:16
标题: 借用隔壁的一道题,关于String的
3. 下面程序的运行结果是什么(    )
  public static void main(String[] args){
                String s1 = “abc”;
                String s2 = “xyz”;
show(s1,s2);
System.out.println(s1+”-----”+s2);
}
static void show(String s1,String s2){
         s1 = s2+s1+”Q”;  
    s2 = “W”+s1;   
}
a) abc-----xyz
b) xyzabcQ-----xyzWabc
c) xyzabcQ---- xyzabcQWabc
d) xyzQ----Wabc


结果是A。
想了,半个小时,突然明白一个问题:
1. 方法体中的形式参数接收到的是一个引用地址。
2. 方法体中的对于引用地址的操作实际上是在对引用地址所对应的对象内容进行操作。
    也就是说:只是在对堆内存中的对象进行操作,并不是栈内存中的对象。
3.这也体现出了String类型一旦初始化就不能被改变的特性。

作者: gzp123    时间: 2015-4-30 23:31
结果是A
作者: 考不上黑马    时间: 2015-4-30 23:44
嗯,学习了
作者: wkz_crystal    时间: 2015-4-30 23:46
恩,分析得很好,当然如果System.out.println(s1+"-----"+s2);这句话在show方法体中,情况就不一样了!
作者: yihuihua    时间: 2015-5-1 00:19
嗯……很到位,我基础测试的时候也遇到跟这差不多的
作者: yihuihua    时间: 2015-5-1 00:21
7、 写出以下代码执行结果,分析为什么?(没有分析结果不得分)
        public class Test {
                public static void main(String[] args) {
                        String s = "abc";
                        s.substring(1);
                        s.replace("bc", "xyz");
                       System.out.println(s);
                       String value = new String ("abc");
                       System.out.println(s == value);
                }
       }
*/
/*
答:1,System.out.println(s);该输出答案依然是abc,因为字符串被初始化就不能被改变,
所以需要重新指定一个String变量去接收s.replace("bc", "xyz");既String s1=s.replace("bc", "xyz");
然后再输出s1
   2,System.out.println(s == value);该输出答案是false,因为String s = "abc";和String value = new String ("abc");
的区别是s在内存中只有一个对象abc,而String value = new String ("abc");在内存中有两个对象,new实例化出来的和abc,该输出语句“==”比较
的是内存地址是否相同,所以答案为false
作者: IDhmpj    时间: 2015-5-1 20:37
yihuihua 发表于 2015-5-1 00:21
7、 写出以下代码执行结果,分析为什么?(没有分析结果不得分)
        public class Test {
              ...

nice,第二点是一道面试题




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2