黑马程序员技术交流社区

标题: 如何定义一个change方法改变主方法中string s的值 [打印本页]

作者: alwayszhao    时间: 2016-2-18 23:16
标题: 如何定义一个change方法改变主方法中string s的值
本帖最后由 alwayszhao 于 2016-2-18 23:18 编辑
  1. public static void main(String []args){
  2. String s= "abc";
  3. change(s);
  4. System.out.println(s);
  5. }

  6. public static void change(){
  7. //??
  8. }

  9. 方法内容写在//后
复制代码




作者: cjwhale    时间: 2016-2-18 23:18
只能把修改后的String return回去了
作者: 黑白涩    时间: 2016-2-19 07:48
关键你也没写要改成什么样的,还有返回String类型的话,你change函数的返回参数也得改
作者: heimagirls    时间: 2016-2-19 10:31
  1. public class Test {
  2.         public static void main(String []args){
  3.                 String s= "abc";
  4.                 String ss = change(s);
  5.                 System.out.println(ss);
  6.                 }

  7.         private static String change(String s) {
  8.                 s="ABC";
  9.                 return s;
  10.                
  11.                
  12.         }
复制代码

作者: yindalei00    时间: 2016-2-19 10:48
本帖最后由 yindalei00 于 2016-2-19 10:55 编辑


change()方法完全无意义,调用完方法又被回收     s字符串不曾改变比如
  1. public class Test {

  2.         public static void main(String[] args) {
  3.                 String s = "abc";
  4.                 change(s);
  5.                 System.out.println(s);
  6.         }
  7.         private static void change(String sss) {
  8.                 sss = "1111";
  9.         }
  10. }
复制代码
输出 abc

作者: yuchifeifan    时间: 2016-2-19 11:28
你不对s赋值说明s的引用是不会在变了现在只能改变s指向的对象的内容了,string中默认有一个存放字符的数组他里面放的就是String代表的内容你这时就要拿到这个数组并给他赋值就可以改变s了 说白了就是反射 唯一有点疑惑的是string里的数组是final修饰的为啥还能被改变?
作者: alwayszhao    时间: 2016-2-21 22:51
谢谢大家
作者: hi丶bo    时间: 2016-2-22 01:24
change方法返回值是String  然后给S赋值,,return回去
作者: huang_bing_hua    时间: 2016-2-22 09:34
alwayszhao 发表于 2016-2-18 23:16

首先返回值类型是String,而不是空,第二:有返回值的方法调用,单独调用会报错,建议先赋值调用再输出。
作者: .cC    时间: 2019-5-18 15:14
public class $_04_Notice {
    public static void main(String[] args) {
        String s1 = "hello";
        $_04_Notice notice = new $_04_Notice();
//        notice.test(s1);
//        System.out.println("s1 = " + s1); // s1 = hello

        s1 = notice.test(s1);
        System.out.println("s1 = " + s1);
    }
    public String test(String s1) {
        s1 = "hi~~";
        return s1;
    }
    /*public void test(String s1) {
        s1 = "hi~~";
    }*/
}
>>>>>>>>>>>>>>>>>>>>>>>>>>>>
为什么change没有改变值,可以理解为:
常量池里面的值不变的,
change方法里面的局部变量指向了一个新的常量。
change方法调用结束后,
main方法里面的局部变量还是指向常量池里面常量。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2