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 */ ...
随机推荐
- Java 继承(extends)、抽象类(abstract)的特点用法原理(7)
Java 中的继承 继承: java中的抽象类用法原理: /* 当多个类中出现相同功能,但是功能主体不同, 这是可以进行向上抽取.这时,只抽取功能定义,而不抽取功能主体. 抽象:看不懂. 抽象类的特 ...
- Cannot find tomcat目录/bin/setclasspath.sh This file is needed to run this program
首先如果直接使用 root 用户来启动 tomcat 的话,是可以正常启动的. 但是我们在 Linux 中使用普通用户启动 tomcat 报了如下错误 Cannot find /developer/a ...
- 专业程序设计part1
7 专业程序设计 (有多少人在大学里学到了自己真正喜欢的专业??并在此专业上获得了升华??)i== 软件图标下载网址:easyicon 01thu 4邻域 8邻域 D邻域 是啥 像素间的连通性,是转为 ...
- 4.15 每周作业 —— 简单DP
免费馅饼 Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submissi ...
- 主流CAD菜单开发
AutoCAD Inventor Solidedge Proe UGNX
- 计算KS值的标准代码
计算KS值的标准代码 from scipy.stats import ks_2samp get_ks = lambda y_pred,y_true: ks_2samp(y_pred[y_true==1 ...
- Opencv笔记(十七)——轮廓性质
边界矩形的宽高比 x,y,w,h = cv2.boundingRect(cnt) aspect_ratio = float(w)/h Extent Extent就是轮廓面积与边界矩形面积的比. are ...
- tesseract系列(1) -- tesseract用vs编译成库
1.下载teseract 下载地址github: https://github.com/tesseract-ocr/tesseract/releases/ 2.编译源码 源码的编译有两种方式 ...
- MFC的combox禁止键盘输入
项目中有个combox的下拉窗控件,鼠标双击总能存在焦点,并且会修改combox显示的文字,网上查了好多资料,都说修改style,可是我的vs2015里没发现有style的属性,后面修改 modal ...
- 树分治(挑战p360)
poj1741 题:http://poj.org/problem?id=1741 #include<iostream> #include<algorithm> #include ...