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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  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”吗?

点评

不,是版主大人给力!  发表于 2015-5-14 19:40

评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1 很给力!

查看全部评分

5 个回复

倒序浏览
  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. }
复制代码
回复 使用道具 举报
/*
* String Float都是final修饰的,在做为实参传递时,若是在方法中改变变量的引用是不会影响本来的值的引用的    属于的值传递
*
* char[] chs = {}  在作为实参传递时,若是在方法中改变的话,是一个引用传递的,改变的话会影响之前的值
*
* int等基本数据类型就不会  属于的值传递
*/
回复 使用道具 举报
来学习下
回复 使用道具 举报
来学习楼上的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马