java中怎么判断相等_Java中判断相等 (== 与 .equals())
1.Java中有两种判断相等的方法:
1.1首先是==运算符
对于基本类型而言,==运算符比较的是值是否相等(本质也是比较的地址,因为常量在常量池中的地址不可改变)
int a = 3;
int b = 3;
System.out.println(a==b);//结果为true
对于引用类型而言,==运算符比较的是变量是否指向同一引用对象(以String为例);
String str1 = "abc";
String str2 = "abc";
System.out.pritnln(str1 ==str2);//结果为false,因为str1和str2所指的地址不同。
2.2 equals()方法
首先先来看一下Object源码,只有一行代码 this==obj;
public boolean equals(Object obj) {
return (this == obj);
}
所以对于Object类而言equals()方法所比较的也是地址,如下所示:
Object o1 = new Object();
Object o2 = new Object();
System.out.println(o1.equals(o2));//结果为false,因为o1和o2所指的是两个对象。
但是我们来看一下String类,它继承了Object类中equals()方法,但却重写了equals()方法,它首先和自己本身作比较,若相等则 返回true,然后在判断它是否属于String类型,若是,则依次比较字符串每个位置上的字符是否相等。
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
所以对于String类型来说,equals()方法比较的是内容是否相等,如下
String str1 = "abc";
String str2 = "abd";
System.out.println(str1.equals(str2));//false;
String str3 = "abc";
System.out.println(str1.equals(str3));//true;
对于String来说,还有一种方法可以比较大小就是compareTo(),该方法的返回值是int类型。源码如下(有注释)
public int compareTo(String anotherString) {
int len1 = value.length; //当前String对象的长度
int len2 = anotherString.value.length; //anotherString对象的长度
int lim = Math.min(len1, len2); //取两者最小的长度
char v1[] = value;
char v2[] = anotherString.value;
int k = 0;
while (k < lim) {
char c1 = v1[k];
char c2 = v2[k];
if (c1 != c2) {
return c1 - c2; //c1和c2所对应的ASCLL码的差值
}
k++;
}
return len1 - len2; //while循环执行完后,返回两者长度的差值
}
java中怎么判断相等_Java中判断相等 (== 与 .equals())相关推荐
- java map key是否存在_java中如何判断map集合中是否存在key
有两种方法可以判断map集合中是否存在某个key. 方法1:直接使用java api提供的containsKey(): 方法2:循环遍历,逐个比较. java相关视频推荐:java视频 具体实现代码如 ...
- java 字符串包含某个字符_java中判断字符串中是否包含某个特定字符串的方法有哪些...
判断一个字符串是否包含某个子串的n种方法: 1.startsWith()方法 2.contains()方法 3.indexOf方法 startsWith()方法 这个方法有两个变体,用于检测字符串是否 ...
- java map key是否存在_java如何判断map集合中是否存在key?
java如何判断map集合中是否存在key?,方法,遍历,不存在,键值,是一个 java如何判断map集合中是否存在key? 易采站长站,站长之家为您整理了java如何判断map集合中是否存在key? ...
- java对于数组的定义_Java中方法的定义与使用,以及对数组的初步了解。
方法 方法的含义 定义: 方法就是用来完成解决某件事情或实现某个功能的办法. 方法实现的过程中,会包含很多条语句用于完成某些有意义的功能--通常是处理文本,控制输入或计算数值. 我们可以通过在程序代码 ...
- java序列化有什么用_java中序列化的作用
一 什么叫序列化 通俗点讲:它是处理对象流的一种机制,即可以很方便的保存内存中java对象的状态,同时也为了方便传输. 二 序列化有什么作用 1.方便传输,速度快,还很安全,被调用方序列化,调用方反 ...
- java list集合增删改_Java中集合类list的增删改查
今天给大家带来的是Java中list类的使用,java.util 包提供了list类来对线性数据操作 List接口是Collection接口的子接口,List有一个重要的实现类--ArrayList类 ...
- Java NIO_I/O基本概念_Java中的缓冲区(Buffer)_通道(Channel)_网络I/O
I/O基本概念 缓冲区基础 缓冲区是I/O的基础, 进程使用read(), write()将数据读出/写入从缓冲区中; 当缓冲区写满, 内核向磁盘发出指令, 将缓冲区中数据写入磁盘中(这一步不需要CP ...
- java修改list中对象的值_Java中List集合的一点总结
为什么要用接口引用指向实现类的对象? 这种写法其实java多态的表现形式 多态的定义: 指允许不同类的对象对同一消息做出响应. 即同一消息可以根据发送对象的不同而采用多种不同的行为方式. (发送消息就 ...
- java类怎么删除对象_java中对象的生成使用和删除
请教大神,在java里,对象生成后,如何删除对象呢?请教大神,在java里,对象生成后,如何删除对象呢? 对象状态由JVM自动管理,GC线程自动回收无用对象,无需也不能自己删除对象. 请问在JAVA中 ...
- java 字符 几个字节_java中字符串占几个字节
首先,char为Java的基本类型,基本类型所占的字节数是固定的,如int占4字节,double占8字节,这可以使得Java在不同的平台上所占类型固定,很好地保证了Java的可移植性.因此,Java中 ...
最新文章
- Hadoop虚拟机的jdk版本和本地eclipse的版本不一致怎么办
- mfc ado 链接mysql 数据_MFC用ado方法和数据库连接后,怎么取得数据?(高加分)...
- Oracle打开虚拟机闪退,虚拟机上启动Oracle服务为什么自动停止,怎么处理?
- linux登录界面主题,Ubuntu 12.10登录界面主题:Butterfly
- Python sys模块的使用
- STL 容器和迭代器连载8_访问顺序容器的元素
- 图片 button 去背景色_不会PS没关系,用Word更换证件照背景色只要10秒!
- pytorch创建dataloader和可视化图片
- shell转化bat工具_shell脚本与bat转换
- 腾讯、京东、滴滴、字节跳动……15个大厂在数据治理和数据分析上的真实案例
- 计算机文档翻页怎么设置,PDF文档翻页设置
- Django邮件应用--QQ邮箱、网易邮箱(一)
- 写给自己过去的一封信:成功=好习惯+自控力
- 用python批量生成有效的IP地址
- Java后端面经(部分)
- Office 365 IT Professional—— 如何将Office 365中的文档同步到客户端,加强协同管理
- 机器学习模型训练测试完整步骤
- 构建一个你自己的类微信系统 -- 可扩展通信系统实践
- 信息可视化的简单概述
- 非门,与门,或们怎么仅用与非门构成,非门,与门,或们怎么仅用或非门非门构成
热门文章
- c语言 函数的参数传递示例_isunordered()函数与C ++中的示例
- Java FilterInputStream reset()方法与示例
- matlab上机实验1,上机实验1:熟悉matlab基本操作
- c#hello world_C#| 打印消息/文本(用于打印Hello world的程序)
- ruby array_在Ruby中使用Array.delete()和Array.delete_at()从Array中移除元素
- SpringBoot时间格式化的5种方法!
- linux localhost的修改
- TextView 单行显示长文本
- 电脑数据存储工具----光盘驱动器
- Mybatis中(#{ })模糊查询like(使用oracle的concat函数嵌套拼接SQL)