黑马程序员技术交流社区
标题:
问一个字符串与字符数组的问题
[打印本页]
作者:
林国锋
时间:
2011-10-7 09:32
标题:
问一个字符串与字符数组的问题
本帖最后由 林国锋 于 2011-10-7 10:09 编辑
public class Example
{
String str = new String("good");
char[] ch = {'a','b','c'};
public static void main(String[] args)
{
Example ex = new Example();
ex.change(ex.str,ex.ch)
System.out.println(ex.str +" and "+ ex.ch);
// 请问这里输出多少?为什么会是这个值?
}
public void change(String str,char[] ch)
{
str = "test ok";
ch[0] = 'g'
}
}
复制代码
请问第9行输出什么结果,为什么结果是这个?
作者:
成杰
时间:
2011-10-7 10:01
这个程序,编译的时候肯定会出错,在静态方法里面不能调用非静态的变量,因此要把str和ch定义成静态变量。
作者:
林国锋
时间:
2011-10-7 10:09
成杰 发表于 2011-10-7 10:01
这个程序,编译的时候肯定会出错,在静态方法里面不能调用非静态的变量,因此要把str和ch定义成静态变量。 ...
嗯,写错了,现在改好了:loveliness:
作者:
黄治文
时间:
2011-10-7 10:15
package com.itcast.io.day2;
public class Example {
static String str = "good";
static char[] ch = { 'a', 'b', 'c' };
public static void main(String[] args) {
Example ex = new Example();
ex.change(str, ch);
System.out.println(ex.str + " and " + ex.ch[0]);
// 请问这里输出多少?为什么会是这个值?
}
public void change(String str, char[] ch) {
str = "test ok";
System.out.println(str);
ch[0] = 'g';
}
}
复制代码
我改写你的代码后输出的结果是:
test ok
good and g
其中原因是这样的:
String作为引用类型,当它作为参数把地址传给方法时,会在内存空间里开辟新的空间,str参数指向的内存地址其实是不一样了,所以参数值的变化不会改变原来的值,如果你在方法内调用str的话,指向的就是新的内存地址。
而char类型是基本数据类型,你作为参数传过去以后,就会直接改动它的原值了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2