Java中equals和==的差别

java中的数据类型,可分为两类:

    1、基本数据类型(也称原始数据类型):byte,short,char,int,long,float,double,boolean,他们之间的比較,应用双等号(==),比較的是他们的值。

    2、复合数据类型(类):当他们用(==)进行比較的时候,比較的是他们在内存中的存放地址

所以,除非是同一个new出来的对象,他们的比較后的结果为true,否则比較后结果为false。 JAVA其中全部的类都是继承于Object这个基类的,在Object中的基类中定义了一个equals的方法,这种方法的初始行为是比較对象的内存地 址,但在一些类库其中这种方法被覆盖掉了。如String,Integer,Date在这些类其中equals有其自身的实现,而不再是比較类在堆内存中的存放地址了。

对于复合数据类型之间进行equals比較,在没有覆写equals方法的情况下。他们之间的比較还是基于他们在内存中的存放位置的地址值的,由于Object的equals方法也是用双等号(==)进行比較的,所以比較后的结果跟双等号(==)的结果同样。

值类型是存储在内存中的堆栈(简称栈),而引用类型的变量在栈中不过存储引用类型变量的地址,而其本身则存储在堆中。

所以。==比較的是栈里的地址。而equals比較的是栈里面地址所指向的堆里面的内容。

public class TestString {
public static void main(String[] args) {
String s1 = "Monday";
String s2 = "Monday";
if (s1 == s2)
{
System.out.println("s1 == s2");}
else{
System.out.println("s1 != s2");}
}
} //编译并执行程序,输出:s1 == s2说明:s1 与 s2 引用同一个 String 对象 -- "Monday"!

再略微修改一下程序,会有更奇怪的发现:

public class TestString {
public static void main(String[] args) {
String s1 = "Monday";
String s2 = new String("Monday");
if (s1 == s2)
{System.out.println("s1 == s2");}
else
{System.out.println("s1 != s2");}
if (s1.equals(s2)) {System.out.println("s1 equals s2");}
else{
System.out.println("s1 not equals s2");}
}
}
//我们将s2用new操作符创建
//程序输出:
//s1 != s2
//s1 equals s2
//说明:s1 s2分别引用了两个"Monday"String对象
 

3. 字符串缓冲池

原来。程序在执行的时候会创建一个字符串缓冲池当使用 s2 = "Monday" 这种表达是创建字符串的时候。程序首先会在这个String缓冲池中寻找同样值的对象,在第一个程序中,s1先被放到了池中,所以在s2被创建的时候,程序找到了具有同样值的 s1

将s2引用s1所引用的对象"Monday"

第二段程序中,使用了 new 操作符,他明确的告诉程序:"我要一个新的!

不要旧的!"于是一个新的"Monday"Sting对象被创建在内存中。

他们的值同样,可是位置不同,一个在池中游泳一个在岸边歇息。

总结例如以下:

==比較的是2个对象的地址,而equals比較的是2个对象的内容。

Java面试求职之==与equals()差别的更多相关文章

  1. 春节过后就是金三银四求职季,分享几个Java面试妙招,轻松搞定HR!

    春节过后就是金三银四,分享几个Java面试妙招,轻松搞定HR! 2020年了,先祝大家新年快乐! 今年IT职位依然相当热门,特别是Java开发岗位.软件开发人才在今年将有大量的就业机会.春节过后,金三 ...

  2. JAVA面试精选【Java基础第一部分】

    这个系列面试题主要目的是帮助你拿轻松到offer,同时还能开个好价钱.只要能够搞明白这个系列的绝大多数题目,在面试过程中,你就能轻轻松松的把面试官给忽悠了.对于那些正打算找工作JAVA软件开发工作的童 ...

  3. java面试和笔试大全 分类: 面试 2015-07-10 22:07 10人阅读 评论(0) 收藏

    2.String是最基本的数据类型吗? 基本数据类型包括byte.int.char.long.float.double.boolean和short. java.lang.String类是final类型 ...

  4. JAVA面试精选

    JAVA面试精选[Java基础第一部分] 这个系列面试题主要目的是帮助你拿轻松到offer,同时还能开个好价钱.只要能够搞明白这个系列的绝大多数题目,在面试过程中,你就能轻轻松松的把面试官给忽悠了.对 ...

  5. java面试笔试大汇总

    java面试笔试题大汇总5 JAVA相关基础知识 1.面向对象的特征有哪些方面 1.抽象:2.继承:3.封装:4. 多态性: 2.String是最基本的数据类型吗? 基本数据类型包括byte.int. ...

  6. Java 面试宝典-2017

    http://www.cnblogs.com/nelson-hu/p/7190163.html Java面试宝典-2017   Java面试宝典2017版 一. Java基础部分........... ...

  7. Java面试宝典-2017

    Java面试宝典2017版 一. Java基础部分........................................................................... ...

  8. Java面试宝典2018

    转 Java面试宝典2018 一. Java基础部分…………………………………………………………………………………….. 7 1.一个“.java”源文件中是否可以包括多个类(不是内部类)?有什么限制 ...

  9. java面试和笔试

    1.Java中异常处理机制和事件机制. 2.String是最基本的数据类型吗? 基本数据类型包括byte.int.char.long.float.double.boolean和short. java. ...

随机推荐

  1. 关于浮动float属性和position:absolute属性的区别

    最近返回头看了很多书籍,一直在纠结float属性和absolute绝对定位的区别和使用的情况,给大家分享一下自己的心得和体会吧. 1,float属性 float属性意义是让元素拜托独占一行的霸道总裁, ...

  2. Java初试

    另外在Java语言的代码内部书写文件路径时,需要注意大小写,大小写需要保持一致,路径中的文件夹名称区分大小写.由于’\’是Java语言中的特殊字符,所以在代码内部书写文件路径时,例如代表“c:\tes ...

  3. Webservices-1.web服务定义简介

    一.WEB服务定义(摘自维基百科)详情:http://zh.wikipedia.org/wiki/Web%E6%9C%8D%E5%8A%A1 Web服务是一种服务导向架构的技术,通过标准的Web协议提 ...

  4. ArcGis Engine 读取自定义prj坐标系文件时,中文名称乱码

    今天测试时发现使用ArcMap自定义一个坐标系,将坐标系名称设置为中文,基准面名称选择为自定义后,然后保存成prj文件. 在自己的程序中读取该prj文件后,发现ISpatialReference 对象 ...

  5. Egret 双端接入爱贝支付遇到的问题

    首先要为 egret 工程引入第三方库: Egret 接第三方库:http://edn.egret.com/cn/index.php?g=&m=article&a=index& ...

  6. BZOJ 1008 越狱

    Description 监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中一种.如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱 In ...

  7. cf E. George and Cards

    http://codeforces.com/contest/387/problem/E 题意:给你n个数,然后在输入k个数,这k个数都在n个数中出现,进行每一次操作就是在n个数中选择长度为w的连续序列 ...

  8. Request.url用法

    原文:Request.url用法 我們在開發網頁應用程式,時常需要去解析網址(Request.Url)的每個片段,進行一些判斷.例如說 "http://localhost:1897/News ...

  9. Netty4.0学习笔记系列之一:Server与Client的通讯

    http://blog.csdn.net/u013252773/article/details/21046697 本文是学习Netty的第一篇文章,主要对Netty的Server和Client间的通讯 ...

  10. 1027. Colors in Mars (20) PAT

    题目:http://pat.zju.edu.cn/contests/pat-a-practise/1027 简单题,考察十进制数和n进制数的转换和输出格式的控制. People in Mars rep ...