Java中的equals和==的差别 以及Java中等价性和同一性的讨论
==对基本数据类型比较的是值,对引用类型比较的是地址
equals()比较的是对象的数据的引用
等价性原理:
- 自反性 x.equals(x)为true
- 对称性 x.equals(y) 为true时,y.equals(x) 也为true
- 传递性 若x.equals(y) 为true , y.equals(z) 为true, 则x.equals(z) 为true
- 一致性 在未修改x,y的值的情况下x.equals(y)始终是相同的值
- 非空性 x.equals(null) 总是 false
public class Test {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubint n=3;int m=3;String str1 = "hello";//"hello"存在于常量池,str1,str2都指向该常量池String str2 = "hello";System.out.println("基本数据类型的 == 判定:"+(n==m)); //判断数据System.out.println("引用数据类型的 == 判定"+(str1==str2));//判断地址String str3 = new String("hello");//"hello"存在于堆的对象内存区,非常量区String str4 = new String("hello");System.out.println("对象的 == 判定:"+(str3 == str4)); //判断地址System.out.println("对象的 equals() 判定"+str3.equals(str4));//判断数据str4 = str3;System.out.println("对象赋值后的 == 判定"+( str3 == str4 ) );System.out.println("对象的 equals() 判定"+str3.equals(str4));}}
结果如下:
基本数据类型的 == 判定:true
引用数据类型的 == 判定true
对象的 == 判定:false
对象的 equals() 判定true
对象赋值后的 == 判定true
对象的 equals() 判定true
public class practice5 {public static void main(String[] args) {Dog spot = new Dog();Dog scruffy = new Dog();Dog spot1 = new Dog();Dog spot2 = new Dog();spot.setNameString("spot");scruffy.setNameString("scruffy");spot.setSayString("Ruff!");scruffy.setSayString("Wurf!");spot2.setNameString("spot");spot2.setSayString("Ruff!");spot1=spot;System.out.println(spot.getNameString()+"\t"+spot.getSayString());System.out.println(scruffy.getNameString()+"\t"+scruffy.getSayString());System.out.println("spot1==spot\t"+(spot1==spot));System.out.println("spot1.equals(spot)\t"+spot1.equals(spot));System.out.println("spot2==spot\t"+(spot2==spot));System.out.println("spot2.equals(spot)\t"+spot2.equals(spot));System.out.println("spot2.nameString==spot.nameString\t"+(spot2.nameString==spot.nameString));System.out.println("spot2.nameString.equals(spot.nameString)\t"+spot2.nameString.equals(spot.nameString));}}
class Dog{String nameString;String sayString;public String getNameString() {return nameString;}public void setNameString(String nameString) {this.nameString = nameString;}public String getSayString() {return sayString;}public void setSayString(String sayString) {this.sayString = sayString;}}
结果
spot Ruff!
scruffy Wurf!
spot1==spot true
spot1.equals(spot) true
spot2==spot false
spot2.equals(spot) false
spot2.nameString==spot.nameString true
spot2.nameString.equals(spot.nameString) true
Java中的equals和==的差别 以及Java中等价性和同一性的讨论相关推荐
- java 实现nfa的化简_DFA与NFA的等价性,DFA化简
等价性 对于每个NFA M存在一个DFA M',使得L(M)=L(M')--------等价性证明,NFA的确定化 假定NFA M=,我们对M的状态转换图进行以下改造: 解决初始状态唯一性:引进新的初 ...
- java中的equals拿什么鞋的_Java中==和equals方法
Java程序中测试两个变量是否相等有两种方式:1.== :2.equals()方法 当使用==来判断两个变量是否相等时,如果两个变量是基本类型变量,且都是基本数值类型(不一定要求数据类型严格相同),则 ...
- java中的equals拿什么鞋的_java.中equals的使用
下面在Cat类里面重写这个继承下来的equals()方法: class Cat { int color, weight, height; public Cat(int color, int weigh ...
- softmax回归中最大化似然和最小化交叉熵的等价性
s o f t m a x softmax softmax回归是一个多分类模型 f ( X ) = s o f t m a x ( X n × d W d × k + b 1 × k ) f(X)=s ...
- C#和Java中“==”和“equals”区别
C#中"=="和"equals"区别如下: 1 using System; 2 class Program 3 { 4 public static void M ...
- java双等号和equals_Java中的 equals和双等号,你懂吗?
点击蓝色"程序员的时光 "关注我 ,标注"星标",及时阅读最新技术文章! 在说equals方法与"=="之前,我们先来回顾一下Java中的数 ...
- 【Java学习笔记之二十九】Java中的equals和==的用法及区别
Java中的"equals"和"=="的用法及区别 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String(&quo ...
- java中==和equals的区别
package com.atguigu.java1;import java.sql.Date;/** * equals()和==的区别* *一.回顾==的使用*==:运算符* 1.可以使用在基本数据类 ...
- 面试必问一:Java 中 == 和 equals 的区别你知道吗
面试必问一:Java 中 == 和 equals 的区别你知道吗 前言 关于这个问题,一般初中级面试中都会遇到,还记得我当初实习找工作的时候也遇到了这个问题,现在都还记得自己是怎么回答的:== 是基本 ...
最新文章
- mongoDB 入门指南、示例
- Error:No resource identifier found for attribute 'appComponentFactory' in packag
- Python常见的数据类型【数字、布尔、字符串、列表和元组、字典】
- boost::unique_copy相关的测试程序
- python无参数装饰器_python_之无参装饰器_01
- java拦截器_Java工程师年底跳槽高潮即将到来,斩获满意offer的必备技巧(二)
- OC Autorelease
- fabric canvas 清空并重置画布
- 两场直播丨 手把手安装搭建GoldenDB、基于IB网络的Oracle Extend RAC最佳实践
- 三、安装cmake,安装resin ,tars服务,mysql 安装介绍,安装jdk,安装maven,c++ 开发环境安装...
- Python算法:推导、递归和规约
- Oracle常见操作和命令
- ubuntu18.04下hadoop安装与集群配置
- GitHub上README.md文件的图片大小尺寸
- 中间代码生成-四元式
- 统计软件简介与数据操作
- Python的一点人生经验
- Oracle的 alter table table_name nologging; 的使用
- DDR设计之地址和容量计算、Bank理解
- [附源码]计算机毕业设计JAVA企业员工管理系统