Java杂谈之String----"=="与equals的区别
来源:互联网 发布:网络推广有哪些好产品 编辑:程序博客网 时间:2024/05/15 05:51
在程序代码的编写中,经常涉及到两个字符串的比较
这个时候一般困惑我们的是"=="和equals方法的取舍问题,实际上,只要明白了这两者
比较的区别,我们就能够正确的选择出到底采用哪种方式进行字符串的比较了
首先我们定义两个字符串
String s1 = "hello";
String s2 = new String("hello");
这两个都建立了"hello"的字符串,但到底有什么不同呢
注意,Java中没有指针的概念,这边的s1,s2是引用(说白了可以看做是指针,但不具备
指针运算的特性等)
如上图可以看出,两种表示的值都是hello的字符串,但是s1,s2这两个引用指向的地址
则不同。
正好"=="判断的是地址是否相等
而equals()方法判断的是值是否相等
这边大家就应该明白什么时候选用什么来判断字符串是否相等了。
以下是用一个代码示例来说明:
package JavaTestString;//常量池--内存中放常量的地方//String s1="hello"----hello字符串会放到常量池中,s1不在常量池中,是引用//String s2="hello"----不会再新建一个hello常量,所以s2和s1指向同一个常量,都是引用//s1==s2----两个引用判断相等,是判断的地址是否相同//String s3=new String("hello")----new出来一个新的内存空间来存放hello,s3依然是引用//综上所述,'=='判断是地址是否相等,而不是值是否相等//判断值是否一样的话,用equals()方法public class JavaStringIsEqual {public static void main(String[] args) {String s1 = "hello";String s2 = "hello";String s3 = new String("hello");//"=="判断两者指向的地址是否相等,并非代表的值if(s1==s2){System.out.println("s1与s2指向的地址相等");}else{System.out.println("s1与s2指向的地址不相等");}//equals()方法判断值是否相等,与地址无关if(s1.equals(s2)){System.out.println("s1与s2值相等");}else{System.out.println("s1与s2值不相等");}//"=="比较s1与s3if(s1==s3){System.out.println("s1与s3指向的地址相等");}else{System.out.println("s1与s3指向的地址不相等");} //equals()比较s1与s3if(s1.equals(s3)){System.out.println("s1与s3虽然指向的地址不相等,但值是一样的");}else{System.out.println("s1与s3指向的地址不相等,值也不相等");}}}
0 1
- Java杂谈之String----"=="与equals的区别
- java基础 equals与==区别,String的hashcode
- Java中String的equals==与区别
- (java)String 中 ==与equals方法 的区别
- Java 中 String equals与==的区别
- java String之“==”和“equals”的区别
- Java中String判断相等equals与==的区别以及StringBuilder的equals
- Java中Object.equals与String.equals的区别
- Java之equals与==的区别
- java基础之==与equals的区别
- java基础之“==“ 与 ”equals ”的区别
- java必懂之"=="与equals的区别
- java核心API之String,StringBuffer和StringBuilder以及equals与==的区别和联系
- String中==与equals区别验证!java中堆与栈的真谛
- Java ==与equals()的区别
- java equals与== 的区别
- java == 与 equals的区别
- java equals与== 的区别
- 判断输入的一行字符串中出现次数最多的字母
- android之ConnectivityManager简介,网络连接状态
- HDU 2055 An easy problem
- python 报错UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in r
- mac关闭指定端口
- Java杂谈之String----"=="与equals的区别
- 云计算中的一些重要概念
- uva Fire Station(FLODY+枚举)(挺不错的简单题)
- ubuntu文件目录结构
- 在Linux命令行,运行sql语句
- hdu2448 / 费用流 / harbin赛区c题
- MyEclipse启动报错Caused by: java.lang.OutOfMemoryError: PermGen space
- 关于Linux ip 配置,jdk 安装, 防火墙设置,nexus搭建总结
- HelloWorld