JAVA字符窜是否相等究竟怎么判别,为什么这句IF这么奇怪呢? 用String.equals(String s)方法比较。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 if (inbuf.substring(0, CHAT_PROBLEM_FLAG.length()).equals(CHAT_PROBLEM_FLAG)) 你把==换成equals()方法试试看。==符号是判断两个对象句柄是否相等(也就是两个句柄是否指向同一个对象),equals()方法的返回值跟实现有关系,不过就String来说,equals()方法首先判断两个字串局柄是否相等,如果不等,再判断内容是否相同。 String.equals()方法比较的是字符串的内容。使用了equals()方法,会对字符串中的所有字符一个接一个地进行比较,如果完全相等,那么返回true.而运算符==比较的是String对象的引用如:String s0="abc";String s1=new String("abc");String s2="a"+"b"+"c";s0.equals(s1); ---->trues0.equals(s2); ---->trues0==s1; ---->falses0==s2; ---->true在这里你或许对s0==s2为true有疑问,这是因为"abc","a","b","c"是字符串常量,它们在编译期就被确定了。如s2,它同样在编译期就被解析为一个字符串常量。Java确保一个字符串常量只有一份拷贝,所以当"abc"和"a"+"b"+"c"被确定为值相等时,当JVM执行了常量池解析的操作,Java会设置两个变量的引用为同一个常量的引用。在constant pool即常量池(在编译期被确定,并已被保存在已编译的.class文件中的一些数据,它包含了方法、类、接口、字符串常量等)中,Java会跟踪所有的字符串常量。 你的程序的SIZE,是怎样写的?贴出来看看 boolean String.equals(String anotherString) 字符串比较 if(a.equals("a"))null比较 if(a==null)数值 if(1==1) ==是一个操作符。equals是Object的一个方法。没有被覆盖的话,他就是用==做比较。==用在对象间,比较的是这两个对象是不是同一个对象(java上看是不是同一个句柄)。String覆盖了equals方法,用来判断两个字符串对象内容是不是相同。我想我的解释应该让你明白了为什么了 用 String.equals(s2)方法 用equals最稳妥了。 大江分析太精辟了,学习! 求高人指教,关于Java静态类 运行jar时调用外部的配置文件 动态向jar包中添加文件的问题 有三个关于java的问题想问问大家,觉得有必要弄清楚 如何用swing实现类似sql中编辑数据表关系图的界面? 服务器端用Socket接受数据,bufferedreader的read方法读当数组当中。接收数据包时,有的数据包服务器端没有显示收到,这是为什么? <think in java>讨论区 谁知道WROX? jb中entitybean的add new finder和add new select有什么不同 Eclipse使用 问题 几个小问题 Applet中如何使用Dialog创建对话框
而运算符==比较的是String对象的引用如:
String s0="abc";
String s1=new String("abc");
String s2="a"+"b"+"c";s0.equals(s1); ---->true
s0.equals(s2); ---->true
s0==s1; ---->false
s0==s2; ---->true在这里你或许对s0==s2为true有疑问,这是因为
"abc","a","b","c"是字符串常量,它们在编译期就被确定了。
如s2,它同样在编译期就被解析为一个字符串常量。
Java确保一个字符串常量只有一份拷贝,所以当
"abc"和"a"+"b"+"c"被确定为值相等时,当JVM执行了常量池解析的操作,
Java会设置两个变量的引用为同一个常量的引用。
在constant pool即常量池(在编译期被确定,并已被保存在已编译的.class文件中的一些数据,它包含了方法、类、接口、字符串常量等)中,Java会跟踪所有的字符串常量。
null比较 if(a==null)
数值 if(1==1)
大江分析太精辟了,学习!