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);
}
} 展开
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);
}
} 展开
展开全部
String 类型的是值传递,你传到其他方法时实际上是把值传过去了,也就是内存中创建了一个新的对象,你在其他方法做修改的对象已经不是之前那个对象了,所以不会影响到之前的对象
更多追问追答
追问
这个知识点好重要的说 Sring好特殊 虽然是应用了新的数据 但却是值传递
追答
C语言有指针,熟悉C的会比较容易理解,java中不操作指针,所以对值传递还是引用传递很多人都很模糊,其实8个基本类型和String都是值传递,其他的对象基本上都是引用传递了,例如你自定义的类,或者集合 或者 数组 等,都是引用传递,你上面的方法如果换了是数组或者集合或者自定义类的话,虽然是void修饰的方法,下面方法操作对象后,上面的方法中的对象是被影响的,因为是引用传递,所以它们是同一个对象,所以不需要返回也一样被影响。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是的 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);
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是的,就是没有返回值的原因
请复习一下java变量的作用域知识...
请复习一下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()方法无法返回结果那要它的作用是什么呀
追答
这应该问写这段代码的人啊
要么添加返回值,要么就删了吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询