黑马程序员技术交流社区

标题: 一简单Java程序,求指教 [打印本页]

作者: ゞ心痛-τ._煩離    时间: 2013-10-21 10:11
标题: 一简单Java程序,求指教
本帖最后由 ゞ心痛-τ._煩離 于 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
作者: 4556    时间: 2013-10-21 10:24
字符串一旦被初始化就不可以被改变了,
作者: 张宏祚    时间: 2013-10-21 10:40
函数里的变量属于局部变量,局部变量和形式参数的任何改变都不会对成员变量有影响的,你的change函数里没有返回值,所以无论 在你的change里发生什么,都不会对text类有影响,除非你这么写:

t.str = t.change(t.str,t.ch);    // chang() 里面加一个 return "text ok";
作者: 李文帅    时间: 2013-10-21 10:56
字符串String是Java程序中经常使用的一个类,它是被final修饰的,并且String类里面的内容也是final的,比如最重要的保存字符串的部分。但是,它有一个特殊的属性,就是一旦初始化以后,就不可再更改了。
作者: 毋须繁华    时间: 2013-10-21 10:59
形参中如果是 String 和基本类型数据类型,那么传递的是值,而不是这个变量,只有引用数据类型传智的才是内存地址,在方法内发生改变,本身也会被改变,引用数据类型为  数组,接口,类。
作者: 寻丶丶觅    时间: 2013-10-21 13:06
我重写了一下楼主的代码,添加了注释,希望可以帮到你
  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. }
复制代码

作者: 寻丶丶觅    时间: 2013-10-21 13:20
还有上面几个同学说的String类型是一个特殊类,初始化不可以更改,我们这里做的只是把str对象指向的地址值改变而已,并没有改变原有的字符串,而是让str指向了"test ok"该字符串的地址.
作者: wenbaoxing    时间: 2013-10-21 15:19
如果想在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. }
复制代码

作者: wenbaoxing    时间: 2013-10-21 15:22
如果想控制内容,可以这样:
  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. }
复制代码





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