Java中equals和==之间的区别
今天在写表达式求值的时候,发现了equals和==||!=和!equals()之间是不一样的。
我就从网上搜了搜关于这方面的知识,然后在下面做一个总结:
Java中有两类数据类型:
基本数据类型(Primitive Data Types)
其中:byte,short,char,int,long,double,boolean
他们用(==)、(!=)、(.equals())这三种方法进行比较的时候都是比较值
复合数据类型(Composite Data Types)
其中:String,数组,一般的类,接口等
下面我主要依靠String来比较==与.equals()的不同
当它们用==操作来进行比较时,比较的是它们在内存中的地址。
而当它们使用.equals()时,比较的是它们的值。
话不多说,先上代码
public class Test{
public static void main(String args[]){
String str1 = "Test";
String str2 = "Test";
System.out.println(str1==str2);
System.out.println(str1.equals(str2));
}
}
运行后,输出:
true
true
下面我们对程序进行稍许改动,发现
public class Test{
public static void main(String[] args) {
String str1 = "Test";
String str2 = new String("Test");
System.out.println(str1==str2);
System.out.println(str1.equals(str2));
}
}
运行后,输出
false
true
这些是因为什么呢?
下面我们提到字符串缓冲池(String Buffer Pool)
程序在运行时会创建一个字符串缓冲池,在第一个程序中,str1和str2都等于"Test",程序会首先在这个字符串缓冲池中寻找有相同值的对象,因为str1那条语句先被执行,所以str2在后来创建的时候,就用了具有相同值str1的地址,所以str1==str2这个表达式才会返回true;
但是第二个程序就不同了,因为第二个程序使用了new关键字,在对空间中为str2分配了一个新的地址,所以在str1==str2就会返回false。
最后,再做一个简单的升华
Java中Object是所有类的基类,在Object中定义了这个.equals()方法,这个方法本身是用来比较对象的地址的。但是在String,Integer,Date等等类中,对.equals()方法进行了重写,所以我们在使用的时候,这个函数比较的就不再是它们的地址了,而是它们的value了。
by 一枝猪
Java中equals和==之间的区别的更多相关文章
- Java中equals和hashcode的区别?
Java中equals和hashcode方法是在Object对象中的,所以每个对象都有这两个方法,大多数时候我们为了实现特定需求需要重写这两个方法 equals和hashcode方法常用在同一个类中用 ...
- (转)java中equals和等号(==)的区别浅谈
java中的数据类型,可分为两类:1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boolean 他们之间的比较,应用双等号(==) ...
- java中equals和compareTo的区别---解惑
大多转载自 百度知道,个人整理以便日后阅读. value1.compareTo(value2) == 0 value1.equals(value2) equals的效率高些,compareTo其实就是 ...
- 简述java中equals()方法和==的区别
==与equals的主要区别是: ==: ==常用于比较原生类型(基本数据类型):byte,short,char,int,long,float,double,boolean,比较的是他们的值. 若用= ...
- java中equals与==号的区别
1.==号对于基本数据类型来说,比较的是值,对于引用数据类型来说比较的是地址值 2.equals方法在object类中,比较的是地址值,但是String类重写了Object类中的equals方法,所以 ...
- Java中equals与==和comparaTo的区别
一.先说说Java中equals和==的区别: Java中的数据类型,可分为两类: 1.基本数据类型(也叫原始数据类型) 八大基本数据类型 char byte short int long doubl ...
- java中equals和==的区别 (转)
java中equals和==的区别 值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中. ==操作比较的是两个变量的值是否相等,对于引 ...
- 【转】Java中equals和==的区别
[转]Java中equals和==的区别 java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boole ...
- 关于java中equals与==的区别的小实验
java中equals与==经常容易混淆,简单一点说就是equals比较的是值是否相等,是一种方法,==比较的两个对象在JVM中的地址,是一种操作符. 做了几个小实验比较结果. 实验一: String ...
随机推荐
- HTML学习笔记2
5.超链接 3种超链接: 1. 连接到其他页面 2. 锚: (是链接页面)指给超链接起一个名字,作用是连接到本页面或者其他页面的特定位置.使用name属性给超链起名字,本页要加# 3. 连接到邮件: ...
- RMAN数据库恢复测试
RMAN恢复实践 RMAN> list backup; using target database control file instead of recovery catalog List ...
- 轻松学JVM(四)——垃圾回收算法
我们都知道java语言与C语言最大的区别就是内存自动回收,那么JVM是怎么控制内存回收的,这篇文章将介绍JVM垃圾回收的几种算法,从而了解内存回收的基本原理. stop the world 在介绍垃圾 ...
- MSCI 成份股 清单
中国加入msci最新消息,MSCI官方6月21日公布将A股纳入新兴市场指数.值得注意的是,今年3月23日,MSCI曾公布了咨询文件,建议只纳入可以通过沪股通和深股通买卖的大盘股,剔除了两地联合上市的公 ...
- 我读<代码整洁之道>--读书笔记整理
第一章 整洁代码 "我可以列出我留意到的整洁代码的所有特点,但其中有一条是根本性的,整洁的代码总是看起来像是某位特别在意他的人写的.几乎没有改进的余地,代码作者设么都想到了,如果你企图改进它 ...
- 【前端】向blog或网站中添加语法高亮显示代码方法总结
向blog或网站中添加语法高亮显示的代码方法总结 文章目录 预备知识 目标 第一类方法:嵌入 第二类方法:外部引用 第三类方法:忽略HTML和PHP 最近在写代码时遇到一个问题,就是如何让代码像在ID ...
- Java中构造方法跟普通方法的区别?
构造方法与普通方法的调用时机不同. 首先在一个类中可以定义构造方法与普通方法两种类型的方法,但是这两种方法在调用时有明显的区别. 1.构造方法是在实例化新对象(new)的时候只调用一次 2.普通方法是 ...
- Android 音视频开发(二):使用 AudioRecord 采集音频数据并保存到文件
版权声明:转载请说明出处:http://www.cnblogs.com/renhui/p/7457321.html 一.AudioRecord API详解 AudioRecord是Android系统提 ...
- JAVA通过I/O流复制文件
JAVA通过I/O流复制文件 本文是对字节流操作,可以多音频视频文件进行操作,亲测有效. 个人感觉这个东西就是靠记的, 没什么好解释的,,,, import java.io.File; import ...
- B/S 架构中,网络模型的分解与协议解析
前言 如果是C/S专业毕业的或者是学过计算机网络课程的童鞋们,相信大家都知道网络模型的划分,本文首先来聊一聊目前对于B/S结构中,网络模型分解的两种方式. 没错,相信大家看到这个图片的时候就已经明白了 ...