A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 了无尘 于 2012-3-14 21:28 编辑

public class Demo
{
    public static void main(String[] args)
    {
        System.out.println("Hello Word!");
    }
}

public class Demo
{
    public static void main(String[] args)
    {
        System.out.println(args[0]);
    }
}  

public class Demo
{
     public static void main(String[] args)
     {
           if((args.length == 2) && (args[0] == "-str"))
           {
                 System.out.println(args[1]);
           }
           else if(args[0] == "-help")
           {
                 System.out.println("-str [参数]  打印指定的字符串");
           }
           else
           {
                 System.out.println("参数不合法");
           }
    }
}

如果运行的话,发现是不行,会打印参数不合法,如果在else里加一个输出打印args[0]的话,会发现打印出来的确实是我们所输入的命令。

原因在哪里呢,字符串本身""这样用就是个对象,而从控制台传进来的字符串虽然跟这个""的字符串是一样的成员参数,但是他们却是完全不一样的两个对象。对于这种应该用的是String类中的equals方法,虽然Object类里用的是==,但是String类把他重写了,实现方面是比较两个字符串的字符序列是否相等,而不是比较两个对象是否相等。

System.out.println(new String("123")==new String("123"));
  System.out.println(new String("123")=="123");
System.out.println("123"=="123");

从上边的代码可以看出来,第一行为false,即新创建的两个对象,虽然值相等,但对象是不等的,就好像两个都叫张三的人,实际不是一个人一样。
第二行也是false,而第三行却为true。这里有个地方需要注意,"123"的创建是肯定的,即在内存中没有这个字符串时,虚拟机会创建一个"123"的字符串对象,如果你new("123"),实际上我们都知道new是新建的意思,就是创建了一个新的值为"123"的对象。拆分一下这个过成,首先创建一个"123",并把这个对象作为参数传递给String的构造函数并生成一个新的对象,这也就好理解了为什么第二行是false。
第三行这里需要说的是为什么为true,这个在上边也说了,就是你两次"123"无论调用的代码写在哪里,只要是这种的,都会先查找是否有这个字符串,如果有,那么就相当于直接这个引用拿过来,如果没有就新建。

最后的代码应该是这个样子的
public class Demo
{
     public static void main(String[] args)
     {
           if((args.length == 2) && (args[0].equals("-str")))
           {
                 System.out.println(args[1]);
           }
           else if(args[0].equals("-help"))
           {
                 System.out.println("-str [参数]  打印指定的字符串");
           }
           else
           {
                 System.out.println("参数不合法");
           }
    }
}



命令行果然蛋疼,做命令行程序更蛋疼   要是javac和jar都是可视化的工具多好

我博客的原文地址
http://blog.sina.com.cn/s/blog_3e984d1901014d92.html

评分

参与人数 1技术分 +2 收起 理由
房宝彬 + 2 很给力!

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马