weixin_40717813
2017-10-30 07:29
采纳率: 20%
浏览 2.5k
已采纳

关于String赋值的问题。

public class StringDemo{
public void Test(){
String s=new String("你好");
int [ ] ss ={ 1,2,3};
change(s,ss);
输出s和ss数组的值。

public void change { String s, int [] ss}{
s="abc";
ss[1]=4.

}
}

这个类在main方法中调用一下test结果会是怎样,为什么啊?

}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

9条回答 默认 最新

  • 一缕清风007 2017-10-30 07:48
    已采纳
     public class Test {
        public static void main(String args[]) {
            String str = "Hello" ;
            fun(str) ;
            System.out.println(str) ;
        }
        public static void fun(String temp) {
            temp = "World" ;
        }
    }
    
    

    图片说明

    点赞 评论
  • 一缕清风007 2017-10-30 07:43

    字符串的值不变,数组里的值改变

    点赞 评论
  • sinat_38913556 2017-10-30 07:49

    楼上说的对
    因为
    s="abc" 相当于新创建了一个对象 change方法结束 这个对象因为没有引用 回收了 test方法里的s仍然指向的是“你好” 这个对象
    ss[1] =4 这个是把堆里面数组对象的第二个值改变了 test方法指向这个对象 所以这个对象打印出来是 4

    点赞 评论
  • weixin_40717813 2017-10-30 07:55

    谢谢啦,我明白啦。我把方法传参没有搞清楚

    点赞 评论
  • longlong3207 2017-10-30 08:10

    s指向“abc”的地址只在change方法里有效

    点赞 评论
  • 那年屋顶的阳光 2017-10-30 09:08

    在C#的语法中
    static void StrChange(string str) 是值传递
    static void StrChange(ref string str) 是引用传递,
    但在实现上
    static void StrChange(string str) 这种值传递,在函数体内对str进行修改之前,与函数外部的变量指向同一块内存,是“引用”传递,但在函数体内对str修改后,就会触发对该str重新分配一块内存。

    点赞 评论
  • ZSP_ZSP 2017-10-30 09:54

    在C#的语法中
    static void StrChange(string str) 是值传递
    static void StrChange(ref string str) 是引用传递,
    但在实现上
    static void StrChange(string str) 这种值传递,在函数体内对str进行修改之前,与函数外部的变量指向同一块内存,是“引用”传递,但在函数体内对str修改后,就会触发对该str重新分配一块内存。

    点赞 评论
  • ZSP_ZSP 2017-10-30 10:03

    字符串的值不变,数组里的值改变

    点赞 评论
  • 路ren甲 2017-10-30 12:26

    public void change { String s, int [] ss}打错了吧

    点赞 评论

相关推荐 更多相似问题