gpt4 book ai didi

java - JSP:为什么这个条件有效?

转载 作者:行者123 更新时间:2023-12-01 16:37:29 25 4
gpt4 key购买 nike

我是一名公认的 JSP(和 Java)菜鸟。我有这段有效的代码:

String pageMessageStart = "<div id=\"messageBox\" class=\"center\">";
String pageMessage = "";
String pageMessageEnd = "</div>";

if(request.getParameter("message") != null) {
pageMessage = pageMessageStart;
/* Certain messages will come in as an alias. Let's make user-friendly messages with them */
if(request.getParameter("message").equals("invalidsession"))
pageMessage += "Session expired; you have been automatically logged out.";
else if(request.getParameter("message").equals("NOCOOKIE"))
pageMessage += "No valid cookie found; you must have cookies enabled to use this application.";
else if(request.getParameter("message").equals("invalidcredentials"))
pageMessage += "Incorrect username and/or password.";
else if(request.getParameter("message").equals("LICENSE_CHANGED"))
pageMessage += "Your license key has been successfully applied.";
else
/* If there is no alias but there is still a message, let's just display it verbatim */
pageMessage += request.getParameter("message");

pageMessage += pageMessageEnd;
};

该字符串稍后会被 out.println 发送到主 HTML 区域中的某个位置。

我不明白的是为什么条件中的 != null 有效。或者更重要的是:它只有工作的外观吗?我非常菜鸟的理解是 .equals() 方法是正确的方法;事实上,如您所见,我的嵌套条件使用 .equals() 。我认为该行应该是:

if(!request.getParameter("message").equals("null") {}
/* or this one */
if(!request.getParameter("message").equals(null) {}

以我有限的理解,我只能猜测当该参数为null时,没有字符串,.equals()是字符串的比较方法。我在寻找正匹配时使用方法,但在寻找负匹配时使用运算符,这似乎不一致。我担心我使用的 != 是不好的做法。

最佳答案

要能够在方法上调用equals(),要求引用null。否则会导致 NullPointerException(仅仅因为 null 不引用/指向具有 equals() 方法的任何内容)。因此,使用 obj != null 而不是 obj.equals(null) 测试。

Object object = null;

if (object.equals(null)) { // NullPointerException! object is null.
// ...
}

使用 !=== 被您解释为“不好的做法”,可能是由于您不应该比较 String 造成的困惑 的内容由这些运算符执行,而不是由 equals() 执行。通过 == 比较 String 只会在它们都指向相同的引用时进行比较,而不是在它们具有相同的内容(内部对象值)时进行比较。

String s1 = "foo";
String s2 = new String("foo");
String s3 = s2;

System.out.println(s1 == s2); // false
System.out.println(s1 == s3); // false
System.out.println(s2 == s3); // true

System.out.println(s1.equals(s2)); // true
System.out.println(s1.equals(s3)); // true
System.out.println(s2.equals(s3)); // true

String 是对象,而不是基元。 !=== 只会给出 int、long` 等原语的预期结果。

顺便说一句,这与 JSP 无关。这只是基本的Java。在 JSP 文件而不是 Java 类中错误地编写 Java 代码并且 Java 代码出现问题并不意味着它是 JSP 问题。在普通的 Java 类中这样做时,您会遇到完全相同的问题。

关于java - JSP:为什么这个条件有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7653259/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com