首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java 6与Java 7中的字符串比较

Java 6与Java 7中的字符串比较
EN

Stack Overflow用户
提问于 2015-12-18 19:48:08
回答 2查看 517关注 0票数 0

我知道Java中的字符串应该使用.equals()而不是==运算符进行比较。

但是在下面的代码中,有一个值为""primaryObserverId

下面给出的if条件在Java6上运行良好,但在Java7上运行失败

代码语言:javascript
复制
 String primaryObserverId = request.getParameter("primary_observer_id");
        if(primaryObserverId == null || primaryObserverId=="")
            primaryObserverId = RoleMap.getUserIdForThisSession(session.getId());

我需要知道为什么这段代码在Java6上工作,而不是在Java7上工作。

我知道String Pool的概念在java中是如何用于字符串文字的,只是想知道这种突然行为的原因。

可以使用不同版本的GlassFish可能会导致任何问题,因为我在Java6中使用GlassFish-2.1,在Java7中使用GlassFish-4.1

EN

回答 2

Stack Overflow用户

发布于 2015-12-18 20:02:25

java中的所有字符串文字在需要时都被放置在堆的特殊区域中。因此,如果您有一个初始化为空字符串的变量,此字符串将被添加到堆中。如果您有另一个被初始化为空字符串的变量,那么它将包含对堆中已有的空字符串的引用,而不是创建新的空字符串。所以看起来你的问题是,当你在java6中运行你的应用程序时,出于某种原因,堆上有一个空字符串,这样你就可以检查这两个字符串是不是完全相同的对象。然而,当在java7中运行时,堆上没有空字符串,因此这两个字符串必须是完全不同的对象。

有关更完整的解释,请参阅this article

票数 0
EN

Stack Overflow用户

发布于 2015-12-18 20:09:22

==比较内存中的地址,而equals()比较两个对象是否有意义地等价,因此在您的示例中,使用equals()方法更有意义,因为Servlet不使用池创建字符串,所以它们不是==,但它们是有意义的等价,因此是equals

代码语言:javascript
复制
String primaryObserverId = request.getParameter("primary_observer_id");

if(primaryObserverId == null || "".equals(primaryObserverId)){
            primaryObserverId = RoleMap.getUserIdForThisSession(session.getId());
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34355005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档