Java面试求职之==与equals()差别
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()差别的更多相关文章
- 春节过后就是金三银四求职季,分享几个Java面试妙招,轻松搞定HR!
春节过后就是金三银四,分享几个Java面试妙招,轻松搞定HR! 2020年了,先祝大家新年快乐! 今年IT职位依然相当热门,特别是Java开发岗位.软件开发人才在今年将有大量的就业机会.春节过后,金三 ...
- JAVA面试精选【Java基础第一部分】
这个系列面试题主要目的是帮助你拿轻松到offer,同时还能开个好价钱.只要能够搞明白这个系列的绝大多数题目,在面试过程中,你就能轻轻松松的把面试官给忽悠了.对于那些正打算找工作JAVA软件开发工作的童 ...
- java面试和笔试大全 分类: 面试 2015-07-10 22:07 10人阅读 评论(0) 收藏
2.String是最基本的数据类型吗? 基本数据类型包括byte.int.char.long.float.double.boolean和short. java.lang.String类是final类型 ...
- JAVA面试精选
JAVA面试精选[Java基础第一部分] 这个系列面试题主要目的是帮助你拿轻松到offer,同时还能开个好价钱.只要能够搞明白这个系列的绝大多数题目,在面试过程中,你就能轻轻松松的把面试官给忽悠了.对 ...
- java面试笔试大汇总
java面试笔试题大汇总5 JAVA相关基础知识 1.面向对象的特征有哪些方面 1.抽象:2.继承:3.封装:4. 多态性: 2.String是最基本的数据类型吗? 基本数据类型包括byte.int. ...
- Java 面试宝典-2017
http://www.cnblogs.com/nelson-hu/p/7190163.html Java面试宝典-2017 Java面试宝典2017版 一. Java基础部分........... ...
- Java面试宝典-2017
Java面试宝典2017版 一. Java基础部分........................................................................... ...
- Java面试宝典2018
转 Java面试宝典2018 一. Java基础部分…………………………………………………………………………………….. 7 1.一个“.java”源文件中是否可以包括多个类(不是内部类)?有什么限制 ...
- java面试和笔试
1.Java中异常处理机制和事件机制. 2.String是最基本的数据类型吗? 基本数据类型包括byte.int.char.long.float.double.boolean和short. java. ...
随机推荐
- DBCONN
package Ulike_servlet; //将该类保存到com.tools包中import java.sql.Connection;import java.sql.DriverManager;i ...
- js操作Cookie,实现历史浏览记录
/** * history_teacher.jsp中的js,最近浏览名师 * @version: 1.0 * @author: mingming */ $(function(){ getHistory ...
- python变量不能以数字打头
在编写python函数时,无意中发现一个问题:python中的变量不能以数字打头,以下函数中定义了一个变量3_num_varchar,执行时报错. 函数如下: def database_feild_v ...
- spart快速大数据分析学习提纲(一)
Spart是什么 Spart是一个用来实现快速而而通用的集群计算平台. 在速度方面,Spart扩展了广泛使用的Mapreduce计算模型,而且高效的支持更多的计算模式,包括交互式查询和流处理.Spar ...
- 新站如何做SEO及注意事项
最近公司做了新网站,完成后运营优化的工作就落在我身上了,由于之前也没有.就去网上百度了一下,上了各种论坛查阅大牛的博客.自己也总结了一些要点,在这里和大家分享一下.新网站大家可以点击查看牛羊养殖在线. ...
- 【Unity探究】物理碰撞实验
这几天为了准备面试,所以决定对平时学习中的盲点扫盲一下,首先想到的就是物理碰撞.以前没有好好研究过,一直模糊不清,到底什么条件下才可以产生物理碰撞呢?只要其中一个有Rigidbody就可以了吗?所以进 ...
- 【技术贴】同一台机器Tomcat7多版本共存配置文档
首先准备好自己下载的Tomcat7的绿色版,一定要是解压的绿色版不能使exe安装包.因为exe安装版很多变量不好配置,我以前最喜欢exe版了,方便快捷,但是我发现还是绿色解压版比较好,优化配置等也很好 ...
- Unity3d开发IOS游戏 基础
Unity3d开发IOS游戏 基础 @阿龙 - 649998群 1.先说明两个问题,我在WIN7下面的U3D里面,用了雅黑字体,但是导出为ios后,字体就看不见了,这是为什么呢?这是需要在MAC下找 ...
- Ubiquitous Religions(并查集)
Description There are so many different religions in the world today that it is difficult to keep tr ...
- UIAutomation识别UI元素
MS UI Automation(Microsoft User Interface Automation:UIA)是随.net framework3.0一起发布的,虽然在如今这个几乎每天都有各种新名词 ...