我试过寻找这个问题的答案,但我不完全确定要搜索什么。基本上我想要的是我的程序的用户能够键入(进入命令行):
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,如果这有所不同。
这不是该计划的重要组成部分,但是......如果有效的话会很好。谁知道这里有什么问题?
谢谢!
答案 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")