2 u011800697 u011800697 于 2014.04.17 13:21 提问

谁帮我分析下这个原因

在一个类里面写了下面内容,为什么输出结果还是 l ,而不是 ss ?

public static void main(String[] args) {
String s = "l";
change(s);
System.out.println(s);
}

public static void change(String ss ){
    ss = "ss";
}

7个回答

u011576033
u011576033   2014.04.18 11:19

change(s) 只是调用了这个方法,并没有要输出它

u010544717
u010544717   2014.04.18 17:14

String类型是不可修改的,不明白的话可以百度一下:“String类型 不可修改”

u011800697
u011800697 你可以去试试,替换了输出的就是'ss' 了。
3 年多之前 回复
u010544717
u010544717 没区别 “ss”存在堆中,s在栈,想修改s指向的内容时由于他是指向String类型所以不可修改
接近 4 年之前 回复
u011800697
u011800697 是吗,如果我把change(s); 直接用 s="ss" ; 来替换呢。
接近 4 年之前 回复
u010450893
u010450893   2014.04.30 16:43

你只是调用了下面方法一下,但是没有返回任何值,也没有给上面的重新赋值。

aaaa2233aa
aaaa2233aa   2014.05.01 02:45

基本数据类型,引用数据类型 形参,实参的改练需要多了解,这都是基础知识

u011800697
u011800697 厉害,我都没往这块想,是得补补基础了
3 年多之前 回复
tyuhvbnm
tyuhvbnm   2014.05.05 12:37

java 是值传递。百度一下java值传递。

u014262409
u014262409   2014.05.05 13:20

因为你的change()方法没有返回值,所以你里面修改了SS的值不会影响到主函数中S的值得,所以S的值依旧还是1.你可以在change()中加个return SS,然后在主函数中S = change(S),这样S就会变成ss了

wx301075522
wx301075522   2014.05.23 16:03

这是Java中的值传递问题,分两种:基本数据类型和引用类型,你用的是String,也就是引用类型,引用类型的话,如果不是对具体对象属性的更改,只是不会变化的,你可以试一下,把类型变为最简单的int,输出的值就不一样了

u011800697
u011800697 厉害,我都没往这块想,是得补补基础了
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!