锁定老帖子 主题:一个馒头引发的血案
该帖已经被评为隐藏帖
|
|
---|---|
作者 | 正文 |
发表时间:2008-11-27
谢谢楼上两位回答我的问题,很好,虽然第一个解释篮子问题回答不是用语言学,但解释也很完美,谢谢两位
|
|
返回顶楼 | |
发表时间:2008-11-27
老抛很生气。。
LZ继续加油吧。。。 |
|
返回顶楼 | |
发表时间:2008-11-27
cxhgoo 写道 我把题目改问,修改一下,代码如下:
public class Test { public static void main(String[] args) { List a = new ArrayList(); B b = new B(); b.mm(a); System.out.println(a); } } public class B { public void mm(List a) { a = new ArrayList(); a.add("mm"); } } 为什么打印出来是 : [] 而把B类改成 public class B { public void mm(List a) { a.add("mm"); } } 则打印出 [mm] 以前没发现,很好奇[]是怎么来的,是因为ArrayList是对象数组吗?有人知道其来源吗? 因为ArrayList的toString方法就是这样设计的 |
|
返回顶楼 | |
发表时间:2008-11-27
最后修改:2008-11-27
简单的问题复杂化!
java只有值传递《关于是否有引用传递,长期没有定论,但是理解了就不会出错,是值还是引用,自己决定,关键要理解正确》c++有引用传递和值传递,多做做scjp的题目就可以了!多画图研究一下为什么??什么是形参和实参,他们的关系在方法的调用过程中是怎么联系的! out.println(obj)会调用toString方法,为什么直接打印一个数组对象名会出现[Ljava.lang. 之类的东西,这就是java规范,你打印一个一般对象后面有@什么什么的,数组对象有L开头,比如你在hibernate中使用native sql query的时候,有可能就出现这种情况,比如 List a=session.createSQLQuery("select count(*),trade_id from product group by trade_id").list(); 那么如何查找count(*)和对应的trade 你直接打印一下 Iterator iter=a.iterator();System.out.println(iter.next()); 结果是: [Ljava.lang.Object;@1d53f5b 说明这个list中存放的元素是一个object[]类型,当然有很多个 那么你强转一下就可以了 while(iter.hasNext()) { Object object = iter.next(); if (object instanceof Object[]) { for (int i = 0; i < ((Object[]) object).length; i++) { System.out.println("num[" + i + "]:" + ((Object[]) object)[i].toString()); } } else System.out.println(object.toString()); |
|
返回顶楼 | |
发表时间:2008-11-27
我认为应该是打印出null,如果mm方法返回一个list,再打印,就是mm了。
|
|
返回顶楼 | |
发表时间:2008-11-27
dingjun123 写道 简单的问题复杂化!
java只有值传递《关于是否有引用传递,长期没有定论,但是理解了就不会出错,是值还是引用,自己决定,关键要理解正确》c++有引用传递和值传递,多做做scjp的题目就可以了!多画图研究一下为什么??什么是形参和实参,他们的关系在方法的调用过程中是怎么联系的! 还有为什么直接打印一个数组对象名会出现[Ljava.lang. 之类的东西,这就是java规范,你打印一个一般对象后面有@什么什么的,数组对象有L开头,比如你在hibernate中使用native sql query的时候,有可能就出现这种情况,比如 List a=session.createSQLQuery("select count(*),trade_id from product group by trade_id").list(); 那么如何查找count(*)和对应的trade 你直接打印一下 Iterator iter=a.iterator();System.out.println(iter.next()); 结果是: [Ljava.lang.Object;@1d53f5b 说明这个list中存放的元素是一个object[]类型,当然有很多个 那么你强转一下就可以了 while(iter.hasNext()) { Object object = iter.next(); if (object instanceof Object[]) { for (int i = 0; i < ((Object[]) object).length; i++) { System.out.println("num[" + i + "]:" + ((Object[]) object)[i].toString()); } } else System.out.println(object.toString()); 你的头像是hide君么? |
|
返回顶楼 | |
发表时间:2008-11-27
cxhgoo 写道 我把题目改问,修改一下,代码如下:
public class Test { public static void main(String[] args) { List a = new ArrayList(); B b = new B(); b.mm(a); System.out.println(a); } } public class B { public void mm(List a) { a = new ArrayList(); a.add("mm"); } } 为什么打印出来是 : [] 而把B类改成 public class B { public void mm(List a) { a.add("mm"); } } 则打印出 [mm] 以前没发现,很好奇[]是怎么来的,是因为ArrayList是对象数组吗?有人知道其来源吗? 楼主的 a = new ArrayList();用错了。你的main里已经定义了这个对象。而你在B类中又重新定义了这个对象。那这两个a所指的内存空间是不一样的。所以第一个总是打印出[].改过后那就是将a的引用传到B。所以是同一个a。 |
|
返回顶楼 | |
发表时间:2008-11-28
可以的...这题目都可以贴出来..
|
|
返回顶楼 | |
发表时间:2008-11-28
恩 路过 出题得人也脑残
|
|
返回顶楼 | |
发表时间:2008-11-28
基础还是不行啊,这是JAVA,不是C
|
|
返回顶楼 | |