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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ゞ心痛-τ._煩離 中级黑马   /  2013-10-21 10:11  /  1232 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 ゞ心痛-τ._煩離 于 2013-10-21 15:47 编辑
  1. public class Test{
  2. String str=new String("good");
  3. char[] ch={'a','b','c'};
  4. public void change(String str,char ch[]){
  5. str="test ok";
  6. ch[0]='g';
  7. }
  8. public static void main(String args[]){
  9. Test t=new Test();
  10. System.out.println(t.str);
  11. t.change(t.str,t.ch);
  12. System.out.print(t.str+"and");
  13. System.out.print(t.ch);
  14. }
  15. }
复制代码
为什么结果是goodandgbc,我怎么感觉是test okandgbc

评分

参与人数 1技术分 +1 收起 理由
To + 1 赞一个!

查看全部评分

8 个回复

倒序浏览
字符串一旦被初始化就不可以被改变了,
回复 使用道具 举报
函数里的变量属于局部变量,局部变量和形式参数的任何改变都不会对成员变量有影响的,你的change函数里没有返回值,所以无论 在你的change里发生什么,都不会对text类有影响,除非你这么写:

t.str = t.change(t.str,t.ch);    // chang() 里面加一个 return "text ok";
回复 使用道具 举报
字符串String是Java程序中经常使用的一个类,它是被final修饰的,并且String类里面的内容也是final的,比如最重要的保存字符串的部分。但是,它有一个特殊的属性,就是一旦初始化以后,就不可再更改了。
回复 使用道具 举报
形参中如果是 String 和基本类型数据类型,那么传递的是值,而不是这个变量,只有引用数据类型传智的才是内存地址,在方法内发生改变,本身也会被改变,引用数据类型为  数组,接口,类。
回复 使用道具 举报 1 0
我重写了一下楼主的代码,添加了注释,希望可以帮到你
  1. public class Test1
  2. {
  3.         String str=new String("good");
  4.         char[] ch={'a','b','c'};
  5.         public void change(String str,char ch[])
  6.         {
  7.                 //因为你定义的参数名为str,与成员变量同名,所以要用this来强调str是对象的str,
  8.                 //或者你把形式参数里的str,改为其他名字。
  9.                 this.str="test ok";
  10.                 ch[0]='g';
  11.         }
  12.         public static void main(String args[])
  13.         {
  14.                 Test1 t=new Test1();
  15.                 System.out.println(t.str);
  16.                 t.change(t.str,t.ch);
  17.                 System.out.print(t.str+"and");
  18.                 System.out.print(t.ch);
  19.         }
  20. }
复制代码
回复 使用道具 举报
还有上面几个同学说的String类型是一个特殊类,初始化不可以更改,我们这里做的只是把str对象指向的地址值改变而已,并没有改变原有的字符串,而是让str指向了"test ok"该字符串的地址.
回复 使用道具 举报
如果想在change()方法中改变:str和ch的值,完全可以像以下代码,因为类中的成员函数可以直接访问类中的成员变量
  1. package com.itheima;

  2. public class Test {
  3.         String str = new String("good");
  4.         char[] ch = { 'a', 'b', 'c' };

  5.         public void change() {
  6.                 str = "test ok";
  7.                 ch[0] = 'g';
  8.         }

  9.         public static void main(String args[]) {
  10.                 Test t = new Test();
  11.                 System.out.println(t.str);
  12.                 t.change();
  13.                 System.out.print(t.str + "and");
  14.                 System.out.print(t.ch);
  15.         }
  16. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1 赞一个!

查看全部评分

回复 使用道具 举报
如果想控制内容,可以这样:
  1. package com.itheima;

  2. public class Test {
  3.         String str = new String("good");
  4.         char[] ch = { 'a', 'b', 'c' };

  5.         public void change(String s,char c) {
  6.                 str = s;
  7.                 ch[0] = c;
  8.         }

  9.         public static void main(String args[]) {
  10.                 Test t = new Test();
  11.                 System.out.println(t.str);
  12.                 t.change("aaaaaaa",'w');
  13.                 System.out.print(t.str + "and");
  14.                 System.out.print(t.ch);
  15.         }
  16. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马