懒的看直接运行之: public class Test{ public static void main(String[] args){ String a ="ab"; String b="a"+"b"; System.out.println(a==b); System.out.println(a==b+"------"+a.equals(b)); System.out.println(a.equals(b)); } }
在加一个判断才有意义: String c = new String("ab"); System.out.println((a==c)+"------"+a.equals(c));
Option Explicit Private Sub bkxt_Click() Form2.Show End SubPrivate Sub gsxt_Click() Form4.Show End SubPrivate Sub jjxt_Click() Dim a a = Shell("c:\Program Files\Internet Explorer\IEXPLORE " & App.Path & " \系统简介.htm", vbMaximizedFocus) '打开网页 End Sub 求大侠将以上代码转换为纯java代码,万分感激
class test1 { public static void main(String[] args) { String a = "ab"; String b = new String(a); System.out.println(a.hashCode()) //3105; System.out.println(b.hashCode()) //3105; System.out.println(a==b); //false System.out.println(a.equals(b)) //true; } } The equals() method compares the characters inside a String object.it means that compare the hashcode() of two objectThe == operator compares two object references to see whether they refer to the same instance. we take new String(),so it refers to different instance.
false
truejava 的常量池,第二个是b = ab------true,然后再和a做的比较。所以是false
false
true
第一个是java常量池,第二个是 b=ab------true 然后再和a做的比较,所以是false;
false
true
第一个是常量池中,用String s = “”声明的字符串,java虚拟机会先到常量池中搜索,如果存在直接引用
第一个:
String a ="ab";
与
String b = "a"+"b";
在Java编译器中是直接优化为
String b = "ab";
所以第一个为true;
equal()方法是比较字符串值是否相等的,所以很自然的也为true;
问题1:为什么第一个是Ture?
问题2:第二个False怎么出来的。
请高人指点!谢谢!
public class Test{
public static void main(String[] args){
String a ="ab";
String b="a"+"b";
System.out.println(a==b);
System.out.println(a==b+"------"+a.equals(b));
System.out.println(a.equals(b));
}
}
false
true
是正确的
第二个里面b=ab,如果在和a比较的话,那么就是false了
System.out.println(a==b+"------"+a.equals(b));
请问高人,这句的运算顺序是从左到右还是从右到左呢?
true
false
true
现在:
String a ="ab";
String b="a"+"b";
System.out.println(a==b);// true
System.out.println((a==b)+"------"+a.equals(b));// true------true
System.out.println(a.equals(b));// true
false //a==b+"------"+a.equals(b) '+' 的优先级高于'==' 及 a==(b+"------"+a.equals(b))
true
正解 "ab"+"-------"+a.equals(b)的优先级高于"=="
false
true
写个main方法测一下,再分析就简单了
String c = new String("ab");
System.out.println((a==c)+"------"+a.equals(c));
Private Sub bkxt_Click()
Form2.Show
End SubPrivate Sub gsxt_Click()
Form4.Show
End SubPrivate Sub jjxt_Click()
Dim a
a = Shell("c:\Program Files\Internet Explorer\IEXPLORE " & App.Path & " \系统简介.htm", vbMaximizedFocus) '打开网页
End Sub
求大侠将以上代码转换为纯java代码,万分感激
String b="a"+"b";
System.out.println((a == null ? b == null : a.equals(b)));
System.out.println((a == null ? b + "------" + a.equals(b) == null : a.equals(b + "------" + a.equals(b))));
System.out.println(a.equals(b));ture
false
ture
String b="a"+"b";
System.out.println((a == null ? b == null : a.equals(b)));
System.out.println((a == null ? b + "------" + a.equals(b) == null : a.equals(b + "------" + a.equals(b))));
System.out.println(a.equals(b));ture
false
ture
false
true
第二个正正得负。
false------true
true
String,除了在传参,其他地方应该没太大分歧。
true
false
true因为+的优先级高于==,所以第二个输出,先执行+,再执行字符串比较,所以应该是ab=="ab------true"所以应该是false。
public static void main(String[] args) {
String a = "ab";
String b = new String(a);
System.out.println(a.hashCode()) //3105;
System.out.println(b.hashCode()) //3105;
System.out.println(a==b); //false
System.out.println(a.equals(b)) //true;
}
}
The equals() method compares the characters inside a String object.it means that compare the hashcode() of two objectThe == operator compares two object references to see whether they refer to the same instance. we take new String(),so it refers to different instance.
String s2 = "BB";
System.out.println(s.hashCode());
System.out.println(s2.hashCode());
System.out.println(s.equals(s2));ls请看这个
equals是先判断是否是同一个对象,再判断长度,最后逐字符判断是否相同,遇到不同就返回false
flase 运算符的优先级a==(b+"------"+a.equals(b))
true String类重写了Object类的equles方法
在下并没有别的意思,就是感觉这是J2SE基础里的东西,是要好好回顾下了,,,
false
true
真是悲剧了。一开始还是优先级。
这是一个优先级的问题。。就想数学里面 乘法总是在加法前面计算一样“+”的优先级大于“==” 所以我们应该先算b+"------"+a.equals(b));然后再计算“==”
所以第二个就相当于a==(b----true) 这个显然不会是true 所以第二个就是false。。
C:\Documents and Settings\Administrator\桌面>java Circle
true
false
true