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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© HM张勇 高级黑马   /  2013-4-2 18:28  /  1085 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 HM张勇 于 2013-4-3 10:33 编辑

public class demoStirng
{
        public static void test(String str)
        {
            str = "A";

        }
        public static void main(String[] args)
        {
            String  s = new String("B");
            test(s);

  System.out.println(s);
}
}
打印的为什么是B而不是A?求详解

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

7 个回复

倒序浏览
这个问题好像有人反复问了很多次了,因为java传递的是引用的拷贝~


评分

参与人数 1黑马币 +3 收起 理由
张熙韬 + 3

查看全部评分

回复 使用道具 举报
本帖最后由 邵震 于 2013-4-2 18:37 编辑
  1. public class java0402d3
  2. {
  3.         public static void test(String str)//你这里返回值写的是void所以不对  我帮你改了一下
  4.         {
  5.             String a=str = "A";
  6.                         System.out.println(a);

  7.         }
  8.         public static void main(String[] args)
  9.         {
  10.             String  s = new String("B");
  11.             test(s);
  12.                 }
  13. }
复制代码
回复 使用道具 举报
因为你NEW了
new 和不new是不一样的
回复 使用道具 举报
这个肯定不可能打印A了,你没有调用test()那个方法,他是不会打印A的,你打印的是S,的值是你新建的String对象的那个B所指向的那个字母"B",因此只能打印B,如果想打印A那就要调用test()方法!
回复 使用道具 举报
String s = new String("B");
            test(s);

  System.out.println(s);

你new出的对象 , 你打印的, 看到了没? 红色标记的 
回复 使用道具 举报

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
邵震 发表于 2013-4-2 18:34

你的问题其实很严重,你的 str=“A”  而你的主函数里面的String s =new String("B")
你在输出语句上面输出S当然是B 这和A有关系吗?一点关系没有啊,
你的test方法也写的有问题,你可以改成
public static void test()
{
      String str="A";
      System.out.print(str);
}
然后在主函数里面调用test()方法就可以打印出A了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马