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学院】
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- java之字符串学习记录
- java学习记录(二)字符串
- Java与C#的比较学习记录(3)
- java学习笔记-String-字符串之间的比较
- java学习——if选择结构、字符串相等比较、Switch选择结构
- Java与C#的比较学习记录(1)
- JAVA学习笔记(二)字符串的比较
- Java与C#的比较学习记录(2)
- java学习 split与indexOf切割字符串时性能比较(学习笔记)
- 09-27-2019学习记录(P447-P477)-Java常用类String和Date-字符串操作代码
- Java与C#的比较学习记录(2)
- Java与C#的比较学习记录(4)
- java学习:字符串比较“==”与“equals”的差异及与c#的区别
- 黑马程序员-JAVA学习之字符串对象的创建和比较
- Java学习记录(记录一部分Java和C++区别和Java里一些比较重要的概念)--稍后会转到新浪博客
- JAVA学习之数组,字符串 (比较基础)
- java学习——if选择结构、字符串相等比较、Switch选择结构
- Java与C#的比较学习记录
- Java与C#的比较学习记录(1)
- 【Java学习笔记】基础知识学习8【字符串比较】