java中字符串相等判断
字符串的判断有2种:
1、判断地址是否相等 用:==
2、判断值是否相等 用:equals方法
Object类作为所有类的超类,而Object类的equals方法是直接比较地址的,源码如下:
public boolean equals(Object obj)
{
return this == obj;
}
所以,在String类中的equals方法,是重写了Object类的equals方法的,String类的equals方法源码如下:
public boolean equals(Object anObject){
if(this==anObject){ //比较地址,如果地址相等,直接返回true
return true;
}
if(anObject instanceof String){ //如果地址不相等,那就比较类型,如果类型不相等,直接返回false
String anotherString =(String)anObject; //由于是String类的比较,所以要把对象强转为String类
int n=value.length; //记录当前对象的字符长度
if(n==anotherString.value.length){ //判断当前对象的字符串长度和传入的字符串长度是否一样,不一样,直接返回false,如果一样,接着往下比较
char v1[]=value;
char v2[]=anotherString .value;
int i=0;
while(n-- !=0){ //将2个字符数组的循环对比
if(v1[i] !=v2[i]) //将字符数组的字符进行对比
return false; //如果出现一个字符不同,马上返回false
i++
}
return true;
}
}
return false;
}
String类的equals比较内容相同思路如下:
1、先判断地址是否相等,相等返回true
2、比较类型是否一样,不一样,返回false
3、将传入的对象强转为String,比较长度,长度不相等,返回false
4、长度相等,循环比较字符数组的元素,当有一元素比较内容不相同,马上返回false
5、2个字符数组循环比较所有元素,没有内容不相同的元素,返回true
测试代码如下:
public class TestString {
public static void main(String[] args) {
String str="abc";
String str2=new String("abc");
System.out.println("两个对象的内存地址是否相等:"+(str==str2));//false
/**比较对应位置上的字符是否相等,如果所有的对象位置上的字符均相等,true,否则返回false*/
System.out.println("两个对象的内容是否相等:"+(str.equals(str2)));
//以下结果为 false
/**因为Person对象 instanceof String 的结果为false ,直接返回false*/
System.out.println("String对象与Person对象的内容是否相等:"+(str.equals(new Person())));
}
}
class Person{
}
水平有限,还请多多指教!
java中字符串相等判断的更多相关文章
- java中字符串的非空判断
问题如下:在java 中 字符串为null 如何判断String str;if(str==null) ??str.equal("null") ?? 答:我觉得应该搞清楚字符串对象和 ...
- Java中字符串为什么不以\0结尾
Java中字符串为什么不以\0结尾 其实这个问题没有什么好说的,Java里面一切都是对象,是对象的话,字符串肯定就有长度,即然有长度,编译器就可以确定要输出的字符个数,当然也就没有必要去浪费那1字节的 ...
- 三张图彻底了解Java中字符串的不变性
转载: 三张图彻底了解Java中字符串的不变性 定义一个字符串 String s = "abcd"; s中保存了string对象的引用.下面的箭头可以理解为"存储他的引用 ...
- java中字符串String 转 int(转)
java中字符串String 转 int String -> int s="12345"; int i; 第一种方法:i=Integer.parseInt(s); 第二种方法 ...
- JAVA 中两种判断输入的是否是数字的方法__正则化_
JAVA 中两种判断输入的是否是数字的方法 package t0806; import java.io.*; import java.util.regex.*; public class zhengz ...
- 【转】Java中字符串中子串的查找共有四种方法(indexof())
原文网址:http://wfly2004.blog.163.com/blog/static/1176427201032692927349/ Java中字符串中子串的查找共有四种方法,如下:1.int ...
- Java中字符串中子串的查找共有四种方法(indexof())
Java中字符串中子串的查找共有四种方法(indexof()) Java中字符串中子串的查找共有四种方法,如下:1.int indexOf(String str) :返回第一次出现的指定子字符串在此字 ...
- JAVA中字符串函数subString的用法小结
本篇文章主要是对JAVA中字符串函数subString的用法进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助 String str; str=str.substring(int begi ...
- Java中字符串的一些常见方法
1.Java中字符串的一些常见方法 /** * */ package com.you.model; /** * @author Administrator * @date 2014-02-24 */ ...
随机推荐
- 2020/1/28 PHP代码审计之命令执行漏洞
0x00 命令执行漏洞原理 应用程序有时需要调用一些执行系统命令的函数,如在PHP中,使用system.exec.shell_exec.passthru.popen.proc_popen等函数可以执行 ...
- Thread--使用condition实现顺序执行
package condition; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Re ...
- 树上问题&图论模板整理
去除过水的模板,包括但不限于dijkstra(甚至堆优化都被过滤了).SPFA.kruskal.拓扑排序等. 欧拉回路:http://uoj.ac/problem/117 #include<bi ...
- 28. docker swarm 容器编排简介
1.采用集群架构 集群架构包含节点和角色 docker 节点中 包含 worker 和 manager 两个角色 manager 相当于 swarm 集群的 大脑 是用来管理配置节点的 (避免单点故 ...
- 如何解决Tomcat端口号被占用
在eclipse中配置好tomcat服务器后,启动时提示错误如下图 提示端口被占用. 第一种方法: 结束占用端口的进程 第一步:netstat -aon|findstr "端口号" ...
- windows 安装svn 要点(非安装步骤)
http://www.visualsvn.com/files/VisualSVN-Server-2.5.6.msi 下载服务端 windows2008搭建svn 1.360软件管家下载 Visua ...
- 怎样在 Akka Persistence 中实现分页查询
在 Akka Persistence 中,数据都缓存在服务内存(状态),后端存储的都是一些持久化的事件日志,没法使用类似 SQL 一样的 DSL 来进行分页查询.利用 Akka Streams 和 A ...
- 吴裕雄--天生自然Linux操作系统:Linux 文件基本属性
Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限.为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定. 在Linux中我们可 ...
- webview Java与JS互调
Android调用JS:方法一 webView.loadUrl("javascript:show('"+info+"')"); Android调用JS:方法二 ...
- python语法基础-并发编程-进程-其他
############### 多进程的信号量 ############## # 多进程的信号量 from multiprocessing import Process import ti ...