JAVA中的==和queals()的区别
一.先来说说Java的基本数据类型和引用类型
八大基本数据类型:Byte,short,int,long,double,folat,boolean,char,其中占一个字节的是byte,short和char占两个字节,int,float占四个字节,double和long占8个字节,boolean只有true和false,这八种数据变量中直接存储值
八大基本数据类型对应着各自的封装类型,提供了更多的方法,且不进行初始化时值默认为空(基本数据类型必须初始化)
像String类型属于引用类型,变量中存储的是地址,对应的地址存储数据
二.equals和==
equals是判断两个变量或者实例指向同一个内存空间的值是不是相同
而==是判断两个变量或者实例是不是指向同一个内存空间
举个通俗的例子来说,==是判断两个人是不是住在同一个地址,而equals是判断同一个地址里住的人是不是同一个
比如下面的代码
public class EqualsTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Integer aaa=new Integer(5);
Integer bbb=new Integer(5);
int a=10;
int b=10;
String str1=new String("justice");
String str2=new String("justice");
String str3;
str3=str1;
System.out.println(aaa==bbb);
System.out.println(aaa.equals(bbb));
System.out.println(a==b);
System.out.println(str1==str2);
System.out.println(str1.equals(str2));
System.out.println(str1==str3);
System.out.println(str1.equals(str3));
}
}
对应结果如下
aaa和bbb都是Integer封装类型,是不同的对象,变量存储地址, 所以==结果为false,equals为true
a和b都是基本数据类型,变量存储值,所以==为true,基本数据类型无equals方法(没有意义)
str1和str2都是String类型,属于引用类型,变量存储地址,所以==为false,equals为true
创建str3的时候,str3指向了str1,所以str1和str3的指向同一个地址,存储的数据自然相同,所以均为true
三.接下来看个有意思的事情(有点神奇)
看图思考一下结果是什么???
结果。。。。。。。。。。。。。。。。。。。。。。。。
说下原因,之所以会有疑问,是大家觉得a和c是不同的对象,所以地址不同,所以结果为false才对,但是定义一个Integer变量时,会默认进行Integer.valueOf(a)操作,看一下这个方法的源码(按住ctrl+鼠标左键进入该方法),
high的值为127,low的值为-128,当进行这个方法时如果值在-128-127之间,返回的值也就是地址是相同的,所以a和c的地址相同,a==c自然为true
————————————————
版权声明:本文为CSDN博主「不划水的易水寒」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_38162448/java/article/details/81611894
JAVA中的==和queals()的区别的更多相关文章
- Java中Set Map List 的区别
java中set map list的区别: 都是集合接口 简要说明 set --其中的值不允许重复,无序的数据结构 list --其中的值允许重复,因为其为有序的数据结构 map--成对的数据结构 ...
- Java中Comparable和Comparator接口区别分析
Java中Comparable和Comparator接口区别分析 来源:码农网 | 时间:2015-03-16 10:25:20 | 阅读数:8902 [导读] 本文要来详细分析一下Java中Comp ...
- 转:Java中abstract和interface的区别
转自:Java中abstract和interface的区别 abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java ...
- Java中this与super的区别【6】
若有不正之处,请多多谅解并欢迎批评指正,不甚感激.请尊重作者劳动成果: 本文原创作者:pipi-changing本文原创出处:http://www.cnblogs.com/pipi-changing/ ...
- Java中堆和栈的区别(转)
栈与堆都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. Java的堆是一个运行时数据区,类的对象从中分配空间.这些对象通过new. ...
- 转:二十一、详细解析Java中抽象类和接口的区别
转:二十一.详细解析Java中抽象类和接口的区别 http://blog.csdn.net/liujun13579/article/details/7737670 在Java语言中, abstract ...
- Java中Long与long的区别(转)
Java中Long与long的区别(转) [本文转载自:http://www.cnblogs.com/bluestorm/archive/2012/04/22/2464739.html] 转载请联系原 ...
- java中堆和堆栈的区别
java中堆和堆栈的区别(一) 1.栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. 2. 栈的优势是,存取 ...
- Java中ArrayList与LinkedList的区别
Java中ArrayList与LinkedList的区别 一般大家都知道ArrayList和LinkedList的区别: 1. ArrayList的实现是基于数组,LinkedList的实现是基于双向 ...
随机推荐
- Geotools在shapefile路网数据中建立缓冲区,并获取缓冲区内的要素
记录一下如何创建创建缓冲区并获取缓冲区内的要素,便于以后查找使用 static SimpleFeatureSource featureSource = null; static CoordinateR ...
- ui自动化chrome文件上传操作
web自动化,再chrome浏览器中文件上传操作
- 学习Docker的记录
一.下载Docker for Windows 与 安装教程 参考文档一步一步的来学习 文档1 文档2 二.Docker的常用命令介绍 docker run -it --rm -p 80 ...
- Java学习笔记(3)——有关异常
异常处理: try { }catch(ExceptionType0 e) { }catch(ExceptionType1 e) { }.....finally { } 有四种情况不执行finally语 ...
- XML的概述,.Dom4解析和SAX解析
1.什么是XML XML 指可扩展标记语言(EXtensible Markup Language) html(hyper text markup langauge) XML 是一种标记语言,很类似 H ...
- 【分布式锁】06-Zookeeper实现分布式锁:可重入锁源码分析
前言 前面已经讲解了Redis的客户端Redission是怎么实现分布式锁的,大多都深入到源码级别. 在分布式系统中,常见的分布式锁实现方案还有Zookeeper,接下来会深入研究Zookeeper是 ...
- 北邮oj 97. 二叉排序树
97. 二叉排序树 时间限制 1000 ms 内存限制 65536 KB 题目描述 二叉排序树,也称为二叉查找树.可以是一颗空树,也可以是一颗具有如下特性的非空二叉树: 若左子树非空,则左子树上所有节 ...
- TCP、UDP服务器模型 在网络程序里面,通常都是一
TCP.UDP服务器模型 在网络程序里面,通常都是一个服务器处理多个客户机,为了出个多个客户机的请求,服务器端的程序有不同的处理方式. 目前最常用的服务器模型: 循环服务器:循环服务器在同一时刻只能响 ...
- 深度学习框架Keras与Pytorch对比
对于许多科学家.工程师和开发人员来说,TensorFlow是他们的第一个深度学习框架.TensorFlow 1.0于2017年2月发布,可以说,它对用户不太友好. 在过去的几年里,两个主要的深度学习库 ...
- 《Flutter 动画系列一》25种动画组件超全总结
动画运行的原理 任何程序的动画原理都是一样的,即:视觉暂留,视觉暂留又叫视觉暂停,人眼在观察景物时,光信号传入大脑神经,需经过一段短暂的时间,光的作用结束后,视觉形象并不立即消失,这种残留的视觉称&q ...