需要帮助在Java中将命令行参数与字符串文字进行比较

时间:2012-06-23 16:35:37

标签: java comparison command-line-arguments

我试过寻找这个问题的答案,但我不完全确定要搜索什么。基本上我想要的是我的程序的用户能够键入(进入命令行):

java galaxySim HELP

并且我的程序告诉他们一些关于文件格式和内容的东西。否则第一个参数是文件名。所以我必须这样做的代码是:

if (args[0] == "HELP") {
  System.out.printf("Help Stuff...");
}else{
  filename = args[0];
  System.out.printf("Filename found");
}

封装在错误处理的东西中,我不相信会影响这个,所以没有写。问题在于:无论我输入什么作为第一个参数,它总是转到else语句。

我已经尝试在参数之前和之后添加空格,但它从来没有帮助。我不认为这是我的IF语句的问题,就像我写

if(args[0] == args[0]){

然后它会转到正确的陈述。好像好像是

args[0] == "Help"

总是假的。是否有某种编码问题?我正在使用win7,如果这有所不同。

这不是该计划的重要组成部分,但是......如果有效的话会很好。谁知道这里有什么问题?

谢谢!

3 个答案:

答案 0 :(得分:4)

使用String

比较equals

改变这个:

if(args[0] == "HELP")

if(args[0].equals("HELP"))

==比较引用相等,而不是值相等。您需要检查值,因此使用equals()

这是进一步了解的link

您可能还想阅读this,了解==equals()方法之间的区别。

答案 1 :(得分:1)

您需要将String个实例与equals()进行比较,而不是==

因此请使用args[0].equals("Help")

当您使用==时,您正在检查它们是否完全相同对象(即您实际上是在检查内存中存储操作数的位置是否为相同),而不是根据类的语义检查它们是否是等效的实例。

答案 2 :(得分:0)

嗯,我们都知道字符串是对象,因此我们无法通过==来比较它们。在面向对象的上下文中,我们使用==运算符来检查两个引用是否指向同一个对象。所以通过这个声明,

args[0] == "HELP"

你告诉JVM引用args [0]并且“HELP”字符串返回的引用是否指向同一个对象,这是不确定的。因为用户输入的字符串和“HELP”字符串是完全不同的对象。

如果你想检查两个对象是字面上(或有意义的相等)你有equals()方法。

所以最终,你应该写

args[0].equals("HELP")