关于Object数组的问题

hongboyongqi 2009-07-09 04:54:46
1.Object数组中不能直接有数组元素吗?如Object [] a = {1,2,true,{1,2,3}}。
2.如果先
int[] f = {0,1,2};
Object [] a = {f};
则输出的结果是:[I@35ce36
如果说f是一个引用,在输出时输出的是f存放的地址,那么程序每次运行时计算机分配给{0,1,2}的地址应该是随机的吧?那也就是f的地址每次也不一定会一样吧?也就是说“[I@35ce36”每次都会不同,但在不同的机子上不同的时段运行程序,每次输出的结果都是“[I@35ce36”,而且不管如何修改数组f的值(包括往数组f中添加数据,改变数据的值等),结果都是“[I@35ce36”。逻辑能力较差,说的比较烦琐,还望高手指点下啊。

public class Test
{
public static void main(String [] args)
{
int c = 88;
int[] f = {0,1,2};
Object [] a = {c,f};
for(int i=0;i < 2;i++)
System.out.print(a[i]+" ");
}
}
...全文
115 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
bigbug9002 2009-07-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bigbug9002 的回复:]
2.这个地址是JVM用自己管理的内存。不是机器的实际内存。


[/Quote]
修改一下:
2.这个地址是JVM用自己管理的内存的地址。不是机器的实际地址。
bigbug9002 2009-07-10
  • 打赏
  • 举报
回复
1.这个地址是一个偏移地址。
2.这个地址是JVM用自己管理的内存。不是机器的实际内存。
3.这个地址是某个HASH算法算出来的。

以上是凭记忆,可能有误。欢迎高手指正。
紫炎圣骑 2009-07-10
  • 打赏
  • 举报
回复
最终调用的方法是
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

[I@35ce36
getClass().getName():I@
Integer.toHexString(hashCode()):35ce36

hashCode 的常规协定是:
在 Java 应用程序执行期间,在对同一对象多次调用 hashCode 方法时,必须一致地返回相同的整数
hongboyongqi 2009-07-10
  • 打赏
  • 举报
回复
大BUG猛啊!
“2.这个地址是JVM用自己管理的内存的地址。不是机器的实际地址”,那为什么每次数组f的偏移地址都一样呢?按道理说每次退出程序再进来运行,JVM给数组f的地址应该不一样吧?

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧