java的system.out.println的问题 是运算符的顺序导致的吧,先将前两个对象相加在和str2比较。。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 String str1 = new String("liunim"); String str2 = str1; System.out.println("str1 == str2: "+ (str1 == str2));这样就true了,不加括号的话,因为前面引号里面的也是String,所以会跟str1加起来再跟str2比较哦~ 同意楼上两位的说法。看来楼主刚学java的娃。建议没事翻翻源码多看看里面的比较方法还有== 优先级问题,ls都已经说了System.out.println("str1 == str2:"+ str1==str2);等价于System.out.println(("str1 == str2:"+ str1)==str2); 字符串间的比较肯定是使用equals()来比较的。用“==”来判断字符串变量是否相等时,它是通过判断两个变量的标识(也就是id号)来决定的,即如果a和b同时指向的是内存中的同一个对象,那么他们的id号是相同的,内容当然也是相同的,而我们这里要判断的是两个不同对象中的字符串内容是否相等,很明显,是不同的对象,那么,用“==”来判断的话,结果肯定都是false了 我亲自编译测试了一下,你说的也许有道理,但是楼主的这个问题应该是运算符优先级的问题。我使用 System.out.println("str1==str2:"+str1==str2) 的时候输出为 false ,当我使用 System.out.println("str1==str2:"+(str1==str2)) 的时候输出为 true。 自己测试时都试一下,== 是指向内存的,Str2 与 str1 所指的内存不同,所以不相等 说来说去还是没个确定的,其实这两种答案的结果都能显示true但到底是优先级问题还是equals()问题啊…… 这个问题已经是两年前的问题啦 ,当时楼主提问以后也就没来怎么看了。还是做个小结吧。 String str1 = new String("liunim"); String str2 = str1; System.out.println("str1 == str2: "+ str1 == str2);首先:执行结果为false的原因确实是因为运算符的优先级问题,“+”的优先级高于“==”于是打印语句等价于System.out.println(("str1 == str2: "+ str1) == str2);再来看“==”操作符,java中的引用类型的“==”操作符运算结果为true的定义是:如果操作数的值都为null或者都引用同一个对象或者数组的话,那么“==”操作的结果为“true”;很明显("str1 == str2: "+ str1) 这个表达式的结果是生成了一个新的字符串对象,他在内存中位置跟str2肯定不是同一个位置,因此("str1 == str2: "+ str1) == str2 的结果为false是肯定的。再来说说equals方法,equals方法是Object类中的方法,任何的类都可以重写这个方法。String类也对这个方法进行了重写,String对equals的定义是: public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String) anObject; int n = value.length; if (n == anotherString.value.length) { char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] != v2[i]) return false; i++; } return true; } } return false; }这是String的equals方法,内容很简单:1.如果两个String应用同一个String对象,equals方法返回true;2.两个String引用即使不是引用同一个String对象,如果两个字符串内的字符序列相等话,equals也返回true。引用类型的 “==”操作是比较两个引用变量是否指向同一个对象;.equals方法则是不同的类根据自身条件定义的一个相等的准则。对于中国公民来说如果身份证号一模一样我们就认为这是同一个人。 java编写数据库查询执行器的问题?求帮忙看下 新手求解 关于数组问题 虽然是个oracle的问题,但还是想来java论坛问 tableviewer新录入的数据怎么设置为红色 高手请看非常具有挑战性的算法(希望各位高手给出JAVA编写的怪物(V)的逃脱算法) 小问题:请各位帮忙解决哈!!! 请教:如何播放wav格式的音频。。。。 高分求救:java无法运行程序 新手求助!关于rotate的用法 如何实现改变按钮上的文字? 多态问题 AudioClip 问题求助
String str2 = str1;
System.out.println("str1 == str2: "+ (str1 == str2));这样就true了,不加括号的话,因为前面引号里面的也是String,所以会跟str1加起来再跟str2比较哦~
System.out.println("str1 == str2:"+ str1==str2);
等价于
System.out.println(("str1 == str2:"+ str1)==str2);
用“==”来判断字符串变量是否相等时,它是通过判断两个变量的标识(也就是id号)来决定的,即如果a和b同时指向的是内存中的同一个对象,那么他们的id号是相同的,内容当然也是相同的,而我们这里要判断的是两个不同对象中的字符串内容是否相等,很明显,是不同的对象,那么,用“==”来判断的话,结果肯定都是false了
我亲自编译测试了一下,你说的也许有道理,但是楼主的这个问题应该是运算符优先级的问题。我使用 System.out.println("str1==str2:"+str1==str2) 的时候输出为 false ,当我使用 System.out.println("str1==str2:"+(str1==str2)) 的时候输出为 true。
这个问题已经是两年前的问题啦 ,当时楼主提问以后也就没来怎么看了。还是做个小结吧。
String str1 = new String("liunim");
String str2 = str1;
System.out.println("str1 == str2: "+ str1 == str2);首先:
执行结果为false的原因确实是因为运算符的优先级问题,“+”的优先级高于“==”于是打印语句等价于
System.out.println(("str1 == str2: "+ str1) == str2);再来看“==”操作符,java中的引用类型的“==”操作符运算结果为true的定义是:如果操作数的值都为null或者都引用同一个对象
或者数组的话,那么“==”操作的结果为“true”;
很明显("str1 == str2: "+ str1) 这个表达式的结果是生成了一个新的字符串对象,他在内存中位置跟str2肯定不是同一个位置,因此("str1 == str2: "+ str1) == str2 的结果为false是肯定的。再来说说equals方法,equals方法是Object类中的方法,任何的类都可以重写这个方法。String类也对这个方法进行了重写,String对equals的定义是:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String) anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
这是String的equals方法,内容很简单:1.如果两个String应用同一个String对象,equals方法返回true;2.两个String引用即使不是引用同一个String对象,如果两个字符串内的字符序列相等话,equals也返回true。引用类型的 “==”操作是比较两个引用变量是否指向同一个对象;.equals方法则是不同的类根据自身条件定义的一个相等的准则。对于中国公民来说如果身份证号一模一样我们就认为这是同一个人。