黑马程序员技术交流社区
标题:
数组问题
[打印本页]
作者:
杨洋
时间:
2012-8-2 14:40
标题:
数组问题
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+";;;;"+ex.ch); //结果是:good;;;;[C@110003
System.out.println(ex.ch); //结果是:gbc
}
public void change(String str,char ch[])
{
str="test ok";
ch[0]='g';
}
}
为什么两个结果不一样?
作者:
李东升
时间:
2012-8-2 15:12
本帖最后由 李东升 于 2012-8-2 15:21 编辑
你从输出结果可以看出,第一个输出的是字符数组的地址,第二个是内容。
你把代码改成如下,会看到两个输出的都是地址,。
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+";;;;"+ex.ch); //结果是:good;;;;[C@110003
System.out.println(ex.ch+""); //结果是:;;;;[C@110003
}
public void change(String str,char ch[])
{
str="test ok";
ch[0]='g';
}
}
复制代码
这是因为你在输出数组加上""的话,就会跟调用了toString()方法一样,数组调用toString()方法输出的就是地址了、
作者:
尤洋
时间:
2012-8-2 16:23
其实直接根据两个的不同点就能看出来,一个直接输出,一个是加上了字符串后输出,
而任何数据类型加上字符串都会 转化成字符串。
基本数据类型如 1+"a"后会得出 “b” ASCII值。
引用数据类型如 数组+“”后会得到 哈希码值。
作者:
黑马黄宏强
时间:
2012-8-2 16:36
本帖最后由 轻尘一笑 于 2012-8-2 16:41 编辑
事情是这样的:
public void change(String str,char ch[])
{
str="test ok";
ch[0]='g';
}
这方法进栈
会新生成一个 String类型的变量 str 然后就接收实参数对象引用,再然后指向堆中的新对象test ok方法执行完毕 str释放,原来的对象并未被改变
而char ch[] 接受了一个对象的引用,然后操作该对象将下标为0的元素赋值为'g' 方法执行完毕 ch变量释放,原来对象已经被改变
执行ex.change(ex.str,ex.ch);
str的值没变,而数组的第0个位置已经变成g
所以:
System.out.println(ex.str+";;;;"+ex.ch); //结果是:good;;;;[C@110003 ex.ch因为有跟字符串相连所以是toString返回值
System.out.println(ex.ch); //结果是:gbc ex.ch在这里使用的是
public void
println
(char[] x)
所以打印出来的是元素值
public void
println
(char[] x)原码如下:
public void println(char x[]) {
synchronized (this) {
print(x);
newLine();
}
}
作者:
杨洋
时间:
2012-8-2 17:36
谢谢,已解决
作者:
杨洋
时间:
2012-8-2 17:39
问题已经解决
作者:
hello world
时间:
2012-8-2 17:41
[img]D:\[内存分析.bmp这个分析图可以很好的解决你的问题了。
作者:
hello world
时间:
2012-8-2 17:49
这个能很好的解释了
内存分析.png
(807.48 KB, 下载次数: 58)
下载附件
2012-8-2 17:47 上传
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2