黑马程序员技术交流社区

标题: 以下字符串为什么不能变换成功? [打印本页]

作者: redlake    时间: 2015-5-13 22:09
标题: 以下字符串为什么不能变换成功?
  1. public class Example
  2. {
  3.         String str = new String("good");
  4.         char[]ch={'a','b','c'};
  5.         public static void main(String args[])
  6.         {
  7.                 Example ex = new Example();
  8.                 ex.change(ex.str,ex.ch);
  9.                 System.out.print(ex.str+" and ");
  10.                 System.out.print(ex.ch);
  11.         }
  12.         public void change(String str,char ch[])
  13.         {
  14.                 str = "test ok";
  15.                 ch[0]='g';
  16.         }

  17. }
复制代码
运行结果 good and gbc  不理解,为什么不是test ok and gbc   ,str不是指向了新的字符串对象“test ok”吗?

作者: lwj123    时间: 2015-5-13 22:45
  1. package com.itheima01;

  2. public class StringDemo {
  3.         String str = new String("good");
  4.         char[] ch = { 'a', 'b', 'c' };
  5.         Float fValue = Float.valueOf(12.3f);

  6.         public static void main(String[] args) {
  7.                 StringDemo sd = new StringDemo();
  8.                 sd.change(sd.str, sd.ch);

  9.                 System.out.println(sd.str);// good
  10.                 System.out.println(sd.ch);// gbc

  11.                 String ss = "web";
  12.                 char[] chh = { 'c', 'd', 'e' };
  13.                 sd.change(ss, chh);

  14.                 System.out.println(ss);// web //不改变
  15.                 System.out.println(chh);// gde //改变

  16.                 sd.change(sd.fValue);
  17.                 System.out.println(sd.fValue);// 12.3没有改变

  18.                 int iValue = 123;
  19.                 change(iValue);
  20.                 System.out.println(iValue);// 123 不改变

  21.         }

  22.         private void change(String str, char[] ch) {
  23.                 str = "test ok";
  24.                 ch[0] = 'g';
  25.                 // ch[1] = 'h';
  26.         }

  27.         private static void change(float fValue) {
  28.                 fValue = 3.4f;
  29.         }

  30.         private static void change(int iValue) {
  31.                 iValue = 321;
  32.         }
  33. }
复制代码

作者: lwj123    时间: 2015-5-13 22:50
/*
* String Float都是final修饰的,在做为实参传递时,若是在方法中改变变量的引用是不会影响本来的值的引用的    属于的值传递
*
* char[] chs = {}  在作为实参传递时,若是在方法中改变的话,是一个引用传递的,改变的话会影响之前的值
*
* int等基本数据类型就不会  属于的值传递
*/
作者: qian0217wei    时间: 2015-5-14 00:08
来学习下
作者: 雪风飞花    时间: 2015-5-14 00:45
来学习楼上的




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