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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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类型一旦初始化就不能被改变的特性。

6 个回复

倒序浏览
结果是A
回复 使用道具 举报
嗯,学习了
回复 使用道具 举报
恩,分析得很好,当然如果System.out.println(s1+"-----"+s2);这句话在show方法体中,情况就不一样了!
回复 使用道具 举报
嗯……很到位,我基础测试的时候也遇到跟这差不多的
回复 使用道具 举报
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
回复 使用道具 举报
yihuihua 发表于 2015-5-1 00:21
7、 写出以下代码执行结果,分析为什么?(没有分析结果不得分)
        public class Test {
              ...

nice,第二点是一道面试题
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马