equal和==的区别(原理讲解)
来源:互联网 发布:网络繁忙请稍后再试 编辑:程序博客网 时间:2024/05/19 00:10
继续来分享我的学习经验
我们平时写程序时经常会陷入equal和“==”这两个陷阱中,有时候要用“==”来判断就可以,有时候却只能用equal来判断,我之前做项目的时候也经常会在这里出现一些问题
接下来我们继续从内存分配的角度来看待这两个判定方式
总体来说equal和“==”都是表示相等的意思,但它们却有很大的区别,如果没有好好理解它们,就有可能在我们的编程工作中造成一些难以发现的bug
那让我们来看看如下这段程序
- class EqualTest
- {
- public static void main(String[] args){
- //声明一个s1变量,由于此处是基本类型变量以直接量的方式来创建java对象,
- //对于java程序中的字符串直接量,JVM会使用一个字符串池来保存它们,即保存在一块堆内存中,
- String s1 ="java";
- //再声明一个s2变量,由于“java”这个字符串直接量因为上一句的s1的创建,已经存在字符串池中,
- //因此会从该字符串池中取出该对象,并赋给s2,内存分配如图2.1所示
- String s2 ="java";
- //对于“==”判定符来说,比较的是两个变量所指向的是否是同一个对象来判断是否相等的
- //因此s1和s2是同一个字符串直接量,固结果类true
- System.out.println("s1==s2:"+(s1==s2));
- //采用new 调用构造器来创建一个java对象,此时尽管变量s3的值为“java”,
- //但是在堆内存中却是一个新创建的对象,内存分配如图2.2所示
- String s3 =new String("java");
- //此时s1和s3分别指向两个不同的对象,因此结果会是false
- System.out.println("s1==s3:"+(s1==s3));
- //此处是调用String重写过的equals()方法进行比较,该方法比较的是两个字符串所包含的字符序列是否完全相同
- //因此此处的结果会是true
- System.out.println("s1.equals(s3):"+s1.equals(s3));
- }
- }
equals()方法是java.lang.Object的方法,也就是所有的java类都会有的方法。它可以被程序员覆盖重写,通过自定义的方式来判定两个对象是否要相等,其中默认的方式与“==”相同。另外,java,lang,String类是一个特殊的类,它不可以被继承,它的equals()方法用来比较字符串的字符序列是否完全相等。
有如下程序,有重写equals()方法来判定学生对象是否相等
- class Student
- {
- String name;
- int age;
- public Student(String name,int age){
- this.name=name;
- this.age=age;
- }
- //比较方法,只有姓名和年龄相等才相等
- public boolean equals(Student obj){
- Student student = obj;
- return this.name.equals(student.name)&&this.age==student.age;
- }
- }
- class TestStudent
- {
- public static void main(String[] args){
- //比较学生对象
- Student stu1 = new Student("joffy",21);
- Student stu2 = new Student("joffy",21);
- Student stu3 = new Student("joffy",22);
- System.out.println("stu1.equals(stu2):"+stu1.equals(stu2));
- System.out.println("stu1.equals(stu3):"+stu1.equals(stu3));
- }
- }
引用地址:http://blog.csdn.net/joffy/article/details/21423455#comments
0 0
- equal和==的区别(原理讲解)
- = 和 equal 的区别
- equal 和 == 的区别
- ==和equal的区别
- java equal和==的区别
- equal和==的区别
- ==和equal的区别
- equal和==的区别
- java equal和==的区别
- equal 和 == 的区别
- ==和equal的区别
- == 和 equal的区别
- ==和equal()的区别
- "=="和"equal"的区别
- equal() 和 == 的区别
- ==和equal的区别
- ==和equal的区别
- equal和“==”的区别
- 1 java程序设计概述
- Unity 下简易状态机的实现
- LeetCode题解:Flatten Binary Tree to Linked List
- codeforces 466D Increase Sequence DP
- LeetCode题解:Populating Next Right Pointers in Each Node
- equal和==的区别(原理讲解)
- Mysql命令大全
- 下载微软虚拟学院视频字幕,解决本地播放没有字幕
- TCP/IP详解卷1 读书笔记:第七章 Ping程序
- LeetCode题解:Triangle
- Java学习笔记----封装和private关键字
- repo 获取Android源码
- LeetCode题解:Best Time to Buy and Sell Stock
- 第三周—项目3 求集合并集