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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 林国锋 黑马帝   /  2011-10-7 09:32  /  2208 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 林国锋 于 2011-10-7 10: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.println(ex.str +" and "+ ex.ch);
  10.                         // 请问这里输出多少?为什么会是这个值?
  11.         }

  12.         public void change(String str,char[] ch)
  13.         {
  14.                         str = "test ok";
  15.                         ch[0] = 'g'
  16.         }
  17. }
复制代码
请问第9行输出什么结果,为什么结果是这个?

3 个回复

倒序浏览
这个程序,编译的时候肯定会出错,在静态方法里面不能调用非静态的变量,因此要把str和ch定义成静态变量。
回复 使用道具 举报
成杰 发表于 2011-10-7 10:01
这个程序,编译的时候肯定会出错,在静态方法里面不能调用非静态的变量,因此要把str和ch定义成静态变量。 ...

嗯,写错了,现在改好了:loveliness:
回复 使用道具 举报
  1. package com.itcast.io.day2;

  2. public class Example {
  3.         static String str = "good";
  4.         static char[] ch = { 'a', 'b', 'c' };

  5.         public static void main(String[] args) {
  6.                 Example ex = new Example();
  7.                 ex.change(str, ch);
  8.                 System.out.println(ex.str + " and " + ex.ch[0]);
  9.                 // 请问这里输出多少?为什么会是这个值?
  10.         }

  11.         public void change(String str, char[] ch) {
  12.                 str = "test ok";
  13.                 System.out.println(str);
  14.                 ch[0] = 'g';
  15.         }
  16. }
复制代码
我改写你的代码后输出的结果是:
test ok
good and g
其中原因是这样的:
String作为引用类型,当它作为参数把地址传给方法时,会在内存空间里开辟新的空间,str参数指向的内存地址其实是不一样了,所以参数值的变化不会改变原来的值,如果你在方法内调用str的话,指向的就是新的内存地址。
而char类型是基本数据类型,你作为参数传过去以后,就会直接改动它的原值了

评分

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

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马