Eclipse中debug下比较字符串遇到一个奇怪的问题

lishiyuzuji 2015-07-13 05:47:50
最近在Eclipse下写了几行java代码,遇到一个奇怪的问题,大神们知道的给详细的说下。

代码很简单,如下:

package com.road;

public class Demo02 {
public static void main(String[] args) {
String s="";
if(s==""){
System.out.println("sdf");
}
System.out.println(s=="");
}
}

输出结果估计也如大家所料:

sdf
true

但在debug时,在Expression窗口添加s==""时,给出的结果却是false,表示很不解。
截图如下:
...全文
248 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
王飞2023 2015-07-15
  • 打赏
  • 举报
回复
这没什么疑惑的。==比较的是地址。
lishiyuzuji 2015-07-15
  • 打赏
  • 举报
回复
引用 1 楼 zys59 的回复:
估计是在String的比较上,eclipse和JVM有歧义,用==比较,是在比较两个字符串的地址,用str.equals("")做比较就好了。
如果对于一个初学者来说,在调试程序的时候遇到这样的情况,,,是不是会质疑JAVA或者Eclipse,,;难道说调试expression那写的字符串s的内存是Eclipse来分配的?而程序中的s是JVM去分配的?两者内存地址不同?一个在JVM的字符串池,一个不在?。。。
ilmlife 2015-07-15
  • 打赏
  • 举报
回复
@Override
	protected boolean getBooleanResult(IJavaValue leftOperand,
			IJavaValue rightOperand) {
		boolean equals = false;
		switch (getInternResultType()) {
		case T_double:
			equals = ((IJavaPrimitiveValue) leftOperand).getDoubleValue() == ((IJavaPrimitiveValue) rightOperand)
					.getDoubleValue();
			break;
		case T_float:
			equals = ((IJavaPrimitiveValue) leftOperand).getFloatValue() == ((IJavaPrimitiveValue) rightOperand)
					.getFloatValue();
			break;
		case T_long:
			equals = ((IJavaPrimitiveValue) leftOperand).getLongValue() == ((IJavaPrimitiveValue) rightOperand)
					.getLongValue();
			break;
		case T_int:
			if (leftOperand instanceof IJavaObject) {
				// enumerations in switch statement
				equals = leftOperand.equals(rightOperand);
			} else {
				equals = ((IJavaPrimitiveValue) leftOperand).getIntValue() == ((IJavaPrimitiveValue) rightOperand)
						.getIntValue();
			}
			break;
		case T_boolean:
			equals = ((IJavaPrimitiveValue) leftOperand).getBooleanValue() == ((IJavaPrimitiveValue) rightOperand)
					.getBooleanValue();
			break;
		default:
			equals = leftOperand.equals(rightOperand);
			break;
		}
		return ((fIsEquals) ? equals : !equals);
	}
HMC150330 2015-07-15
  • 打赏
  • 举报
回复
==对比在内存地址 equals 对比值
三仙半 2015-07-14
  • 打赏
  • 举报
回复
估计是在String的比较上,eclipse和JVM有歧义,用==比较,是在比较两个字符串的地址,用str.equals("")做比较就好了。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧