您的位置:首页 > 编程语言 > Java开发

Java学习记录|字符串的比较

2020-03-28 20:15 113 查看

一般情况下:
基本类型使用==做比较
引用类型使用equals做比较
但在字符串的比较方面有一些特殊之处

1. ==

  • 比较基本类型时

是比较存储的值是否一样

System.out.println(9==10);//false
  • 比较引用类型时(以字符串为例)

和内存存储区域有关
基本类型:存储的是值,存储在栈中,比较的是值
引用类型:存储的是数据和引用,==比较的是引用

System.out.println("www.baidu.com"=="www.baidu.com");//true

两个字符串比较的时候,比较的是内存地址。两个字符串都是常量,在内存区域的静态区中。由于是一样的字符串,所以在静态区只保存一份。所以true。当两个字符串不一样时,在静态区中才会申请一份新的内存存储不一样的字符串

加入变量s2,s3,s4

String s2=new String("www.baidu.com");
String s3="www.baidu.com";
String s4="www.baidu.com";
System.out.println(s2==s3);//false
System.out.println(s3==s4);//取得的两个字符串内存地址是一样的true

s3和s4在栈里存储,二者指向089地址的内存区域,= =比较引用,所以s3==s4(true)
s2构造变化,new了一个新的String,String传递常量存在静态区,但String对象会保留地址在堆里,指向String对象,所以s2= =s3(false)

2.equals

  • equals在字符串中的比较是比较里面的数据(字符串特殊之处)

(代码承上)s2和s3里面的数是相等的

System.out.println(s2.equals(s3));//true
  • 在自己所创建的类中,使用equals和==比较的都是引用
public static void main(String[] args) {
Student s1=new Student(1,"lina");//前面已经有Student的构造方法
Student s2=new Student(1,"lina");

System.out.println(s1==s2);//false

因为new出来的都放在堆里,堆里会申请内存区域
栈里有s1和s2指向堆中存放的区域
s1==s2比较内存地址,输出为false

(当使用equals方法的时候,每一个类都继承至object,equals是object的方法,所以可直接使用)

System.out.println(s1.equals(s2));//false

其实equals比较的还是引用,输出为false
那么什么时候为true呢?以下为例

public static void main(String[] args) {
Student s1=new Student(1,"lina");//前面已经有Student的构造方法
Student s2=new Student(1,"lina");
Student s3=s2;//!s3和s2指向同一个内存区域

System.out.println(s3==s2);//true
System.out.println(s3.equals(s2));//true
}

3.重写equals方法

通过==做引用类型的比较,equals方法在字符串类型的比较是比较数值。如果想要比较自己所创建的类,用equals方法比较里面数据的方法时,考虑重写equals方法。

public boolean equals(Student s){
if(this.age==s.age&&this.name==s.name){
return true;
}else {
return false;
}
}
public static void main(String[] args) {
Student s1=new Student(1,"lina");//前面已经有Student的构造方法
Student s2=new Student(1,"lina");

System.out.println(s1.equals(s2));//true
}

学习来源:【bilbili:siki学院】

  • 点赞
  • 收藏
  • 分享
  • 文章举报
nanali_lili 发布了15 篇原创文章 · 获赞 0 · 访问量 265 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: