java 大神比较下这两段代码的结果为什么不一样

这个输出的结果为什么是:java而不是iava难不成是m(Strings)这个方法有void无返回值,所以对s1的改动不会影响main中的s1值吗(⊙o⊙)!我是小白pu... 这个输出的结果为什么是:java 而不是iava 难不成是 m(String s)这个方法有void无返回值,所以对s1的改动不会影响main中的s1值吗 ( ⊙ o ⊙ )!我是小白
public class Hellojava {
public static void m(String s)
{
s=s.replace('j','i');
}
public static void main(String arg[])
{
String s1=new String("java");
m(s1);
System.out.println(s1);
}
}

而下面这个程序输出的是 iava,
public class Hellojava {
public static void main(String arg[])
{
String s1=new String("java");
s1=s1.replace('j','i');
System.out.println(s1);
}
}
展开
 我来答
qq438669983
2015-10-30 · TA获得超过347个赞
知道小有建树答主
回答量:502
采纳率:25%
帮助的人:194万
展开全部
String 类型的是值传递,你传到其他方法时实际上是把值传过去了,也就是内存中创建了一个新的对象,你在其他方法做修改的对象已经不是之前那个对象了,所以不会影响到之前的对象
更多追问追答
追问
这个知识点好重要的说 Sring好特殊 虽然是应用了新的数据 但却是值传递
追答
C语言有指针,熟悉C的会比较容易理解,java中不操作指针,所以对值传递还是引用传递很多人都很模糊,其实8个基本类型和String都是值传递,其他的对象基本上都是引用传递了,例如你自定义的类,或者集合 或者 数组 等,都是引用传递,你上面的方法如果换了是数组或者集合或者自定义类的话,虽然是void修饰的方法,下面方法操作对象后,上面的方法中的对象是被影响的,因为是引用传递,所以它们是同一个对象,所以不需要返回也一样被影响。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ICBC09111
推荐于2016-08-05 · 超过53用户采纳过TA的回答
知道答主
回答量:96
采纳率:0%
帮助的人:82.9万
展开全部

是的  s1 = "java"  在m中你s值虽然改变成iava了  但是你并没有把这个iava赋值给s1啊  然后你输出s1的时候它还是java。你得改成

public class Hellojava {
public static String m(String s)
{
         s=s.replace('j','i');
         return s;
}
public static void main(String arg[])
{   
String s1=new String("java");
    s1 = m(s1);
    System.out.println(s1);
}
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友951d77399
2015-10-30 · 超过61用户采纳过TA的回答
知道小有建树答主
回答量:98
采纳率:0%
帮助的人:130万
展开全部
是的,就是没有返回值的原因
请复习一下java变量的作用域知识...
更多追问追答
追问
大神也就是说
public static void main(String arg[])
{
int a=5;
m_sd(a);
System.out.println(a);

无论在带void 的m_sd()这个方法中a的值怎么变 ,屏幕上输出的a总是等于5吗?那既然这个m_sd()方法无法返回结果那要它的作用是什么呀
追答
这应该问写这段代码的人啊
要么添加返回值,要么就删了吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式