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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 木华 中级黑马   /  2014-5-30 09:01  /  1554 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 木华 于 2014-6-23 21:24 编辑

class StringTest
{
public static void main (String[]args)
{
String s1 = "hello";
String s2 = "java";
show(s1,s2);
System.out.println(s1+"..."+s2);


}
public static void show(String s1,String s2)
{
s2.replace('a','o');
s1=s2;
}

}

为何输出结果为hello java

10 个回复

倒序浏览
猜测你想要的结果是s2里面的a变成o吧,再让s1=s2吧,我是个新手来攒分入学的,说下我的看法,replace这个函数返回值类型是String,而不是void
public static void main (String[]args)
        {
                String s1 = "hello";
                String s2 = "java";
                s2=s2.replace('a', 'o');
                s1=s2;
                System.out.println(s1+"..."+s2);
        }

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1

查看全部评分

回复 使用道具 举报
我新手,连replace都没看懂,虽然不知道是不是真正正确,但我个人觉得是这样的:class StringTest
{
public static void main (String[]args)
{
String s1 = "hello";
String s2 = "java";
show(s1,s2);//此处调用了show函数,跳转至show运行,show的类型是void,没有返回值,即show里边有结
//果,但并未返回。因此程序继续执行下一个语句,自然输出了hello world。
System.out.println(s1+"..."+s2);


}
public static void show(String s1,String s2)
{
s2.replace('a','o');
s1=s2;
}

}

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1 还要继续努力呢。

查看全部评分

回复 使用道具 举报
是hello java;P刚看毕老师的视频到第四天,要是我说的不对不要怪我:P,我不是来灌水的{:2_31:}
回复 使用道具 举报
  1. package Chp13;

  2. public class StringTest {
  3.         public static void main(String[] args) {
  4.                 String s1 = "hello";
  5.                 String s2 = "java";
  6.                 show(s1, s2);
  7.                 System.out.println("在main方法中:" + s1 + "..." + s2);
  8.                 // 输出结果:在main方法中:hello...java
  9.         }

  10.         public static void show(String s1, String s2) {
  11.                 String str = s2.replace('a', 'o');// 该方法返回的是一个字符串,而你并没有用字符串去接收,所以原来的没有变
  12.                 System.out.println(str);// 输出结果:jovo
  13.                 s1 = s2;// 相当于将"java"直接赋值给了"hello",所以现在s1、s2都是"java"了
  14.                 System.out.println("在show方法中:" + s1 + "..." + s2);
  15.                 // 输出结果:在show方法中:java...java
  16.         }
  17. }
复制代码
       总结:String作为引用参数传递的时候非常特殊,只需要将其看做是基本数据类型即可,也就是形参的改变不会影响实参。
                  String的方法你还不熟练,建议再多加练习。

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1

查看全部评分

回复 使用道具 举报
LFW 发表于 2014-5-30 10:30
我新手,连replace都没看懂,虽然不知道是不是真正正确,但我个人觉得是这样的:class StringTest
{
public ...

show的类型是void,没有返回值,即show里边有结
//果,但并未返回
这句话。。。
回复 使用道具 举报
本帖最后由 黎志勇 于 2014-5-30 11:07 编辑

show()方法里面的参数s1,s2只是引用了main()方法中的变量s1,s2的值,而不是互为等同。
首先看一下执行show()方法的过程,大可把show()方法改成,这样不容易混淆;
  1. public static void show(String strA,String strB)
  2. {
  3. strB.replace('a','o');
  4. strA=strB;
  5. }
复制代码

这个跟你写的是一样的,
执行show()方法是,strA、strB分别获得main()中s1,s2的值,其引用值分别为"hello","java",然后可以无视s1,s2了,
之后 strB.replace('a','o');
strB会断开对"java"这个字符串的引用,而另外引用执行替换后得到的新字符串"jovo",
然后 strA=strB;
strA 和 strB 会共同引用字符串 "jovo" ,
整个过程 main()方法中的 s1,s2 的引用值都没有改变,他两就是打酱油的,所以输出"hello java"。
说到底,就是方法内定义的局部变量跟方法外定义的变量,不是一回事。
回复 使用道具 举报
木华 中级黑马 2014-5-30 11:11:49
8#
张百振 发表于 2014-5-30 10:40
总结:String作为引用参数传递的时候非常特殊,只需要将其看做是基本数据类型即可,也就是形参的改 ...

谢谢啦,我现在就是一直在敲代码,查自己的漏洞。
回复 使用道具 举报
木华 中级黑马 2014-5-30 11:15:47
9#
LFW 发表于 2014-5-30 10:33
是hello java刚看毕老师的视频到第四天,要是我说的不对不要怪我,我不是来灌水的 ...

不好意思,视频我已经看了两遍了,现在一直在敲代码,String作为引用参数传递的时候非常特殊,只需要将其看做是基本数据类型即可,也就是形参的改变不会影响实参。我没有记好这个知识点。我会继续努力的。
回复 使用道具 举报
LFW 中级黑马 2014-5-30 12:09:51
10#
{:2_31:}这样子,我还没看到呢{:2_41:}哥们努力努力加油加油!and我觉得我看视频多了,我都开始学毕老师讲话了。。。时不时讲的话怪怪的。。。。莫怪莫怪
回复 使用道具 举报
LFW 中级黑马 2014-5-30 12:11:37
11#
哇,人生中第一次得到除注册外的技术分、、、、、感谢大家{:2_38:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马