1

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

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,如果这有所作为。

它不是程序的重要组成部分,但是……如果它有效,那就太好了。有人知道这里有什么问题吗?

谢谢!

4

3 回答 3

5

比较Strings 使用equals

改变这个:

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

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

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

这是进一步知识的链接

您可能还想阅读本文==以了解和equals()方法之间的区别。

于 2012-06-23T16:36:51.017 回答
1

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

所以使用args[0].equals("Help")

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

于 2012-06-23T16:36:52.547 回答
0

好吧,我们都知道字符串是对象,所以我们不能用==. 在面向对象的上下文中,我们使用==运算符来检查两个引用是否指向同一个对象。所以通过这个声明,

args[0] == "HELP"

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

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

所以最终,你应该写

args[0].equals("HELP")
于 2012-06-23T16:47:40.493 回答