java字符串比较:equals()与==

圆又圆      2022-04-07     139

关键词:

关于字符串比较用equals还是用==,总结一下.

字符串为对象:
1."=="
所有"对象变量"用==作比较时比的是两个对象在堆中的引用.
2."equals()"
所有对象的equals方法继承自Object类的方法,而String重写了equals方法的比较算法,它比较的是字符串的内容,即在堆中的了符序列
3.特点
字符串是一种比较特殊的对象,这里的特殊指的是在运行期间,它的赋值直接改变引用(当然,任何对象的赋值都是直接改变的引用,只不过字符串这种东西往往让人容易理解为它是在原来的基础上操作的,尤其是+=这类操作),而不是在原来所引用的内存块中做修改.(因此有了StringBuffer类的出现)
结论:
1.
String s1 = "hello";
String s2 = "hello";
System.out.println(s1.equals(s2));  //true
System.out.println(s1 == s2);       //true
按照上面的说法,第一个true不难理解.
而第2个之所以也为true是因为,java编译器用的类似于C语言中的"文字池机制",即在源代码中所有的字符串常量声明全部放在一块内存区域,因此当一个字符串声明时赋值的是一个字符串常量,那么如果"文字池"中有这个字符串常量,编译器将直接把它的引用赋值给这个变量.
因此在用==来比较s1和s2时,将会得到true.
2.
String s1 = "hello";
String s2 = "hello";
s1 = s1 + "a";
s2 = s2 + "a";
System.out.println(s1.equals(s2));  //true
System.out.println(s1 == s2);       //false
第3,4行的赋值操作在运行期间执行,根据上面的知识点3:两个变量的引用将会发生改变.因此这时用==相比时将会得到false;
(在运行期间所得到的字符串内容,将不会放到所谓的"文字池"之中,然后如果有相同内容的变量引用相同内容,这样作的话需要每次字符串改变时需要检查它的内容,并再在文字池中查找看是否有相同内容的常量,太过浪费效率.)
("文字池机制"也许也是为什么字符串对象在作更改时,直接改变引用的一个原因,因为如果直接对引用的内存块作操作的话,另一个指向相同引用的字符串变量将也会发什么改变,发生逻辑混淆)
3.
代码略.
当字符串对象从不同地方(字符串常量;本地资源文件读取;网络传输:如表单提交;等等)获得时:除了是编译期间用相同常量赋值的字符串变量的引用相同外,其它的全部是新的引用.因此,与这种变量直接用==相比时将得到false,即使内容相同
应用结论:
1.如果是单纯的比较字符串内容的话:用equals()
2.如果确实是要比较两个变量的引用的话:用==

equals与==的区别

==号,他比较的是一个对象在内存中的地址值,比如2个字符串对象String s1 =newString("str");Strings2=newString("str");如果用==号比较,会返回false,因为创建了两个对象,他们在内存中地址的位置是不一样的。equals的情况比较复杂... 查看详情

java中字符串比较equals()和equalsignorecase()的区别

1、使用equals()方法比较两个字符串是否相等。它具有如下的一般形式:booleanequals(Objectstr)这里str是一个用来与调用字符串(String)对象做比较的字符串(String)对象。如果两个字符串具有相同的字符和长度,它返回true,否则返... 查看详情

将字符串与空字符串进行比较(Java)

】将字符串与空字符串进行比较(Java)【英文标题】:Comparingastringwiththeemptystring(Java)【发布时间】:2010-10-0614:48:01【问题描述】:我有一个关于将字符串与Java中的空字符串进行比较的问题。如果我将字符串与空字符串与==或equa... 查看详情

java中如何将int与string作比较

...//定义一个整型int str = "232";//定义一个字符串2、把int转成stringString stra = a+"";//通过与字符串连接,转换成字符串stra3、通过equals进行比较boolean b = stra.equals(str);//比较是否一致,如... 查看详情

java中的==与equals()

1.基本类型比较,直接可使用==与!=2.对象的比较,必须使用equals()方法。实际上,若使用==来比较对象,其比较的是对象的引用,然而不同的引用永远也不可能相等。此时必须要去比较对象的内容,要使用equals()方法。publicbooleanequ... 查看详情

java中equals和equalsignorecase的区别

...ls和equalsignorecase的区别和使用1、使用equals()方法比较两个字符串是否相等。它具有如下的一般形式:booleanequals(Objectstr)这里str是一个用来与调用字符串(String)对象做比较的字符串(String)对象。如果两个字符串具有相同的字符... 查看详情

==与equals

...类型比较的是内存地址1.为什么String类中的equals是比较的字符串内容  01.查询Object类中的方法    publicbooleanequals(Objectobj){      return(this==obj); 比较的是内存地址    }  02.再去看String类中的方法    St... 查看详情

java中比较对象

...过两个对象的属性是否相等,需要重写Object的equals()方法.字符串比较因为字符串池(stringpool)的存在,字符串的比较有很大不同.通过==比较看两段代码publicclassMain{publicstaticvoi 查看详情

java中字符串比较equals和equalsignorecase的区别

...方法展示:public boolean equals(Object anObject)将此字符串与指定的对象比较。当该参数不为null,并且是与此对象表示相同字符序列的String对象时,结果才为true,否则为false。equalsIgnoreCase,方法展示:public boolean equa... 查看详情

java中怎么比较两个字符串是不是相等?

JAVA比较两个字符串是否相等可以用equals方法或者是“==”。equals方法常常用来检测两个对象是否相等,即两个对象的内容是否相等,如果只是比较对象的内容,而不比较对象来源和功能类型时,常用此方法。“==”常用于用于比... 查看详情

与null比较使用==还是equals

...一个对象而言,不是基本数据类型的变量值。equals常用来字符串的比较,==则用来基本数据类型值比较 参考技术Bstring类型与null比较用==,string类型与空字符串“”比较用equals本回答被提问者采纳 参考技术Cnull调用equals方法肯定... 查看详情

java中的equals与==

    equals()与==都是java中用于进行比较的,返回boolean值,不同的是equals()是Object类中定义的一个方法,==是一个比较运算符。下面是equals()在Object中的源码:    public boolean equals(Object obj)&nbs 查看详情

java第二周的学习知识3(==与equals)

...差别1)对于==,如果作用于基本数据类型的变量,则直接比较其存储的“值”是否相等;如果作用于引用类型的变量,则比较的是所指向的对象的地址2)对于equals方法,注意:equals方法不能作用于基本数据类型的变量如果没有... 查看详情

java字符串比较

问题:判断一个字符串s是否为空字符串“”错误方法:s!=“”或s==“”字符串s为空字符串时,s!=“”还是返回true==与equals的区别 结论:字符串是对象类型,不能用==判断是否相等equals()比较的是对象的内容(区分字母的大小... 查看详情

java中的字符串比较方法

  java中的字符串比较方法:  1)string1.equals(string2)  2)str1==str2。  java中字符串的比较是==比较引用,equals比较值的做法。但是不同的声明方法字符串的比较结果也是不同的。例如:Stringstr1=newString("a");Stringstr2=n... 查看详情

java==与equals()方法的总结

...。byte,short,char,int,long,float,double,boolean  他们之间的比较,应用双等号(==),比较的是他们的值。 2.复合数据类型(类)  当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new... 查看详情

java进行对象比较时的equals()和hashcode()方法(代码片段)

Java进行对象比较中的equals()和hashcode()1.equals()方法与"=="的比较与分析首先提出一个误区:==比较时进行地址的比较equals比较时进行值的比较Stringa="123";Stringb="123";System.out.println(a.equals(b));// 查看详情

java中字符串比较用=和equals区别

=:是比较两个字符串引用的地址是否相同,即是否指向同一个对象equals方法:则比较字符串的内容是否相同。例如Stringa="abc";    Stringb="abc";a==b返回true,a.equals(b)同样返回true,这是为什么呢?    原... 查看详情