Java中equals和==的区别
来源:互联网 发布:淘宝已评价怎么删除 编辑:程序博客网 时间:2024/06/13 23:27
这个问题是Java面试中经常被问到的问题,也是在笔试中经常被问到,那么他们的究竟是有什么区别呢?
先看下面的test code:
public class Test1{ public static void main(String args[]){ String a="1234"; String b="1234"; String c = new String("1234"); System.out.println(a==b); System.out.println(a==c); System.out.println(a.equals(c)); }}
输出结果为:
truefalsetrue
首先我们来了解下string这个java中经常用到的字符串类型:
在Java中,string是一种特殊的包装类,其数据有两种的创建形式:
1.String s = "abc";2.String s = new String("abc");
第一种先在栈中创建一个对String类的对象引用变量s,然后去查找”abc”是否被保存在字符串常量池中,如果没有则在栈中创建三个char型的值’a’、’b’、’c’,然后在堆中创建一个String对象object,它的值是刚才在栈中创建的三个char型值组成的数组{‘a’、’b’、’c’},接着这个String对象object被存放进字符串常量池,最后将s指向这个对象的地址,如果”abc”已经被保存在字符串常量池中,则在字符串常量池中找到值为”abc”的对象object,然后将s指向这个对象的地址。
第一种的特点是JVM会自动根据数据的实际的情况来决定是否有必要创建新的对象。
第二种的的String创建可以变相的理解成:
1 String object = "abc";2 String s = new String(object);
第一步参考第一种创建方式,而第二步由于”abc”已经被创建并保存到字符串常量池中,因此jvm只会在堆中新创建一个String对象,它的值共享栈中已有的三个char型值。
而第二种的特点就是一概在队中创建新对象,而不管其字符串是否相等,是否有必要创建新的对象。
那么现在就有必要清楚在程序之中equals和==的区别了:
首先java所有的类都继承自Object这个基类,而Object这个基类的基本都是由equals用==来实现,所以equals和==是一样的,都是比较对象地址,java api里的类大部分都重写了equals方法,包括基本数据类型的封装类、String类等。
因此String类==用于比较两个String对象的地址,equals则用于比较两个String对象的内容(值)。
- Java中==和equals的区别,equals和hashCode的区别
- Java中==和equals的区别,equals和hashCode的区别
- Java 中==和 equals 的区别, equals 和 hashCode 的区别
- Java中==和equals的区别,equals和hashCode的区别
- Java语法----Java中equals和==的区别
- Java语法----Java中equals和==的区别
- Java语法----Java中equals和==的区别
- Java语法----Java中equals和==的区别
- Java 中 equals 和 == 的区别和联系
- Java中==和equals的区别和联系
- java中字符串的equals和==的区别
- java中 ==和 equals区别
- java中"==" 和 equals区别
- Java中equals和==区别
- Java 中equals和==区别
- java中==和equals区别
- Java中equals和== 区别
- Java中"=="和"equals"区别
- Codeforces Round #345 (Div. 2)
- java部分源码分析——LinkedList
- centos 7 中防火墙的关闭问题
- 带你吃透RTMP
- IOS开发之----Mac终端 常用命令
- Java中equals和==的区别
- Servlet 05 客户端 http请求
- Detection and Classification
- NYOJ-104最大和(动归题)及连续最大和核心
- iOS开发-单例模式
- C++ 关于最长公共子串问题
- acm944
- Servlet 06响应头信息
- unity3d引擎程序员养成