diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/ConstantExpressionVisitor.java b/java/java-psi-impl/src/com/intellij/psi/impl/ConstantExpressionVisitor.java
index 835be8ea8f0e..6b634abca4ef 100644
--- a/java/java-psi-impl/src/com/intellij/psi/impl/ConstantExpressionVisitor.java
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/ConstantExpressionVisitor.java
@@ -247,7 +247,7 @@ class ConstantExpressionVisitor extends JavaElementVisitor implements PsiConstan
value = Boolean.valueOf(((Number)lOperandValue).doubleValue() == ((Number)rOperandValue).doubleValue());
}
else if (lOperandValue instanceof String && rOperandValue instanceof String) {
- value = Boolean.valueOf(lOperandValue == rOperandValue);
+ value = Boolean.valueOf(lOperandValue.equals(rOperandValue));
}
else if (lOperandValue instanceof Boolean && rOperandValue instanceof Boolean) {
value = Boolean.valueOf(((Boolean)lOperandValue).booleanValue() == ((Boolean)rOperandValue).booleanValue());
@@ -260,7 +260,7 @@ class ConstantExpressionVisitor extends JavaElementVisitor implements PsiConstan
value = Boolean.valueOf(((Number)lOperandValue).doubleValue() != ((Number)rOperandValue).doubleValue());
}
else if (lOperandValue instanceof String && rOperandValue instanceof String) {
- value = Boolean.valueOf(lOperandValue != rOperandValue);
+ value = Boolean.valueOf(!lOperandValue.equals(rOperandValue));
}
else if (lOperandValue instanceof Boolean && rOperandValue instanceof Boolean) {
value = Boolean.valueOf(((Boolean)lOperandValue).booleanValue() != ((Boolean)rOperandValue).booleanValue());
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting6/ReachableWhileBodyDueToConstantStringComparison.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting6/ReachableWhileBodyDueToConstantStringComparison.java
new file mode 100644
index 000000000000..62122117498f
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting6/ReachableWhileBodyDueToConstantStringComparison.java
@@ -0,0 +1,43 @@
+
+class Bar {
+ public static final String T = "";
+
+ void m0() {
+ while (T == "") {
+ f();
+ }
+ f();
+ }
+
+ void m() {
+ while (T == "a") {
+ f();
+ }
+ }
+
+ void m01() {
+ while (T != "") {
+ f();
+ }
+ }
+
+ void m1() {
+ while (T != "a") {
+ f();
+ }
+ f();
+ }
+
+ void m2() {
+ while (T != T) {
+ f();
+ }
+ }
+
+ void m3() {
+ while (T == T) {}
+ f();
+ }
+
+ private void f() {}
+}
\ No newline at end of file
diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/LightAdvHighlightingJdk6Test.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/LightAdvHighlightingJdk6Test.java
index 6d34bef3a548..b514f892657d 100644
--- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/LightAdvHighlightingJdk6Test.java
+++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/LightAdvHighlightingJdk6Test.java
@@ -94,4 +94,8 @@ public class LightAdvHighlightingJdk6Test extends LightDaemonAnalyzerTestCase {
public void testStaticOnDemandImportResolvesToClass() throws Exception {
doTest(false, false);
}
+
+ public void testReachableWhileBodyDueToConstantStringComparison() throws Exception {
+ doTest(false, false);
+ }
}