黑马程序员技术交流社区

标题: 请教一个关于数组的小知识 [打印本页]

作者: 张昊镭    时间: 2012-7-6 16:56
标题: 请教一个关于数组的小知识
本帖最后由 张昊镭 于 2012-7-6 23:30 编辑

在第十天第六个视频第25题,要求我查找指定数组中的某个元素是否存在,最后的代码是这样的
class Demo
{
    public int getIndex(char[] arr,char key)
    {
        if(arr==null)
            throw new IllegalArgumentException("数据异常,数组为空");
        for(int x=0;x<arr.length;x++)
        {
            if (arr[x]==key)
                return x;
        }
        return -1;        
    }
    public static void main(String[] args)
    {
        char[] arr={'1','2','3','A'};
        System.out.println(new Demo().getIndex(arr,'B'));
    }
}
我的问题就在红色的代码上,要我检测一个数组吧,我可以创建一个数组,但我想既然有匿名对象,那么我是否可以写个匿名数组,这样我一行代码就搞定,于是我这样写
public static void main(String[] args)
    {
        System.out.println(new Demo().getIndex(new char[]{'1','2','3','A'},'A'));
    }
没想到编译成功,运行也正确,请教下数组也有匿名的?是不是带new的都可以不要用取名字,为了节省代码直接写new什么即可?比如new对象和new数组。


作者: 来明坤    时间: 2012-7-6 17:34
new Demo().getIndex(arr,'B') //你是说这个么
匿名一是为了简化代码,二是为了告诉GC我这个对象只用一次,用完回收
相对某个集合进行一些操作,而这个集合只会被用到一次的时候,用匿名数组是比较合适的。
Java代码  
public class Main {  
    public static void main(String[] args) {  
        out1(new String[] {"1", "2"});   
        out2("1", "2");   
    }  
      
    static void out1(String[] ss){  
        for (String str : ss) {  
            System.out.println(str);  
        }  
    }  
      
    static void out2(String... ss){  
        for (String str : ss) {  
            System.out.println(str);  
        }  
    }  
}  
但是不是为了节省代码什么都可以写成new的  除非你确信只用一次
作者: 杨朔    时间: 2012-7-6 17:54
我还没有听说过匿名数组这个概念,所以不能给你说匿名数组怎么怎么了,但是你这个
getIndex(char[] arr,char key)地方的第一个参数需要一个数组,你不管怎么写都是传进去一个数组,
当然结果一样了。数组定义有好几种,先给你这两种吧
1.  int[] i={1,2,3}
2.  int[] i=new int[]{1,2,3}
在这两个里边都是定义了一样的数组i,你那道题的后边可以这样写
public static void main(String[] args)
    {
        int[] i=new int[]{1,2,3};
        System.out.println(new Demo().getIndex(i,'1'));
    }
你总不能说换个写法就是匿名的吧。
作者: 张昊镭    时间: 2012-7-6 18:03
杨朔 发表于 2012-7-6 17:54
我还没有听说过匿名数组这个概念,所以不能给你说匿名数组怎么怎么了,但是你这个
getIndex(char[] arr,cha ...

呃,我确实是用了两种写法,
1.
public static void main(String[] args)
    {
        char[] arr={'1','2','3','A'};
        System.out.println(new Demo().getIndex(arr,'B'));
    }
2.
public static void main(String[] args)
    {
        System.out.println(new Demo().getIndex(new char[]{'1','2','3','A'},'A'));
    }
但是写法1里面我把数组取了个名字叫arr,而写法2我没有取名字,直接就是new了一个数组。我也没听说过匿名数组,所以才想问问这个写法2算不算匿名数组,因为感觉很像匿名对象。
作者: 杨朔    时间: 2012-7-6 18:07
quyitquyit 发表于 2012-7-6 18:03
呃,我确实是用了两种写法,
1.
public static void main(String[] args)

你的学习态度太好了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2