Java中equals和== 的区别
来源:互联网 发布:mac idea groovy 配置 编辑:程序博客网 时间:2024/05/21 08:41
Java课上讲过equals和==的区别,但在今天编码时实际碰到时,才引起重视。出问题的代码如下:
//if(position_s!="" && (team!="" || former_teams!="")){ if(!position_s.equals("") && (!team.equals("")||!former_teams.equals(""))){ count++; bfw_player.write(name + "\t" + id + "\t" + position_s + "\t" + team + "\t" + former_teams + "\t" + player_statistics + "\n"); }
在if语句判断中,String 类型的 position_s 可能值为空“”, 而注释中的写法错误。主要是== 符号比较的是两个字符串的引用地址(内存地址),这样的话,注释中的if判断条件总是为真(因为两个比较对象的引用地址都不一样); equals方法比较的是两个字符串的字符串序列值,只要两个比较的两个字符串的表面字母序列一致,就相等。
这里具体的背景知识,就牵扯到了String对象以及字符串缓冲池的概念。参考博客:Java中equals和==的区别 java的String类,equals函数和比较操作符==的区别
public class Test{ public static void main(String[] argStrings){ String s1 = "hello"; String s2 = "hello"; String s3 = "world"; String s4 = new String("world"); String s5 = "HI"; String s6 = s5.toUpperCase(); String s7 = s5.toLowerCase(); if(s1==s2) System.out.println("s1==s2"); else System.out.println("s1!=s2"); if(s1.equals(s2)) System.out.println("s1 equals s2"); else System.out.println("s1 not equals s2"); s4 = s4.intern(); if(s3==s4) System.out.println("s3==s4"); else System.out.println("s3!=s4"); if(s3.equals(s4)) System.out.println("s3 equals s4"); else System.out.println("s3 not equals s4"); if(s5==s6) System.out.println("s5==s6"); else System.out.println("s5!=s6"); if(s5==s7) System.out.println("s5==s7"); else System.out.println("s5!=s7"); }}
注释行注释时,输出结果为
s1==s2s1 equals s2s3!=s4s3 equals s4s5==s6s5!=s7注释行没有注释时,输出结果为
s1==s2s1 equals s2s3==s4s3 equals s4s5==s6s5!=s7
输出结果的差异在于:字符串缓冲池的作用。 s2 赋值的时候,先检查字符串缓冲池中是否已经有值为"hello"的字符串对象。如果有就将该对象赋值给s2,这样就能节约内存。 s4的赋值的时候,采用new的形式,这样就显示的说明,需要new一个新对象给s4, 而不是在字符串缓冲池中找一个值相等的对象给s4。 intern函数的作用就是,将值相同的String对象,都等同为字符串缓冲池中一个对象,这样节约内存 ------ 比较的判断基础是:==判断的是对象的引用(内存地址),equals判断的是字符串的表面值序列。
s5、s6、s7的比较,主要是由于 toUpperCase() 和 toLowerCase() 方法返回一个新的String对象,它将原字符串表示字符串的大写或小写形式;但是要注意:如果原字符串本身就是大写形式或小写形式,那么返回原始对象。
- Java中==和equals的区别,equals和hashCode的区别
- Java中==和equals的区别,equals和hashCode的区别
- Java 中==和 equals 的区别, equals 和 hashCode 的区别
- Java中==和equals的区别,equals和hashCode的区别
- Java语法----Java中equals和==的区别
- Java语法----Java中equals和==的区别
- Java语法----Java中equals和==的区别
- Java语法----Java中equals和==的区别
- Java 中 equals 和 == 的区别和联系
- Java中==和equals的区别和联系
- java中字符串的equals和==的区别
- java中 ==和 equals区别
- java中"==" 和 equals区别
- Java中equals和==区别
- Java 中equals和==区别
- java中==和equals区别
- Java中equals和== 区别
- Java中"=="和"equals"区别
- 黑马程序员——Java基础一
- 一道关于连续正整数序列和的示例
- linux下的基本网络配置/虚拟机三种网络模式该如何上网指导(视频)
- mysql高效编程阅读摘要--高级应用篇
- 堆栈溢出
- Java中equals和== 的区别
- usb驱动程序
- 将Riak集成为Web应用程序的重负荷缓存服务器
- 小闹一下vb.net 正则表达式
- 二进制数操作
- Java高级特性(一)
- js 省市 二级联动
- 打通两台机器的ssh功能
- LoadLibrary失败的原因