论坛首页 招聘求职论坛

一个馒头引发的血案

浏览 16804 次
该帖已经被评为隐藏帖
作者 正文
   发表时间:2008-11-27  
谢谢楼上两位回答我的问题,很好,虽然第一个解释篮子问题回答不是用语言学,但解释也很完美,谢谢两位
0 请登录后投票
   发表时间:2008-11-27  
老抛很生气。。

LZ继续加油吧。。。

0 请登录后投票
   发表时间: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方法就是这样设计的
0 请登录后投票
   发表时间: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());
0 请登录后投票
   发表时间:2008-11-27  
我认为应该是打印出null,如果mm方法返回一个list,再打印,就是mm了。
0 请登录后投票
   发表时间: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君么?
0 请登录后投票
   发表时间: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。
0 请登录后投票
   发表时间:2008-11-28  
可以的...这题目都可以贴出来..
0 请登录后投票
   发表时间:2008-11-28  
恩  路过 出题得人也脑残
0 请登录后投票
   发表时间:2008-11-28  
基础还是不行啊,这是JAVA,不是C
0 请登录后投票
论坛首页 招聘求职版

跳转论坛:
Global site tag (gtag.js) - Google Analytics