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项目转换为带有Tomcat的动态Web项目
原文链接:http://blog.csdn.net/l4432321/article/details/52049125 直接项目右键进入Properties配置,点击Project Facets,再点 ...
- c# 多线程——入门学习
1. 概念介绍 1.1 线程 线程是操作系统能够进行运算调度的最小单位,包含在进程之中,是进程中的实际运作单位.一条线程指的时进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不 ...
- PAT Advanced 1048 Find Coins (25) [Hash散列]
题目 Eva loves to collect coins from all over the universe, including some other planets like Mars. On ...
- C++数组常用操作
1. 遍历数组 使用基于范围的for循环来遍历整个数组 用_countof()来得到数组中的元素个数 #include <iostream> #include <cstdio> ...
- Matlab高级教程_第四篇:Matlab高级函数_关键词:drawnow,addpoints,animatedline,getpoints
0. MATLAB真实航母基本的工具,其中的函数/工具不计其数,而且有些函数/工具非常的炫酷.在MATLAB第四篇章把平时工作中用到的些许函数进行使用的讲解 主题1.:drawnow 解释:更新图窗并 ...
- UEFI启动(翻译)
本文是我翻译自国外技术博客的一篇文章,其中讲述了 UEFI 的一些基本概念和细节. 本文的原始链接位于: https://www.happyassassin.net/2014/01/25/uefi-b ...
- Properties类(一)
Java中读写资源文件最重要的类是Properties,功能大致如下: 1. 读写Properties文件 2. 读写XML文件 3. 不仅可以读写上述两类文件,还可以读写其它格式文件如txt等,只要 ...
- Spring 连接MySQL报错java.sql.SQLException: Unknown system variable 'tx_isolation'
先是报错255,这个时候需要把 jdbc:mysql://localhost:3306/projUse 写成 jdbc:mysql://localhost:3306/projUse?useUnicod ...
- 自定义View淡出动画
//AllGestureView为自定义view AllGestureView *gestureView=[[AllGestureView alloc]init]; gestureView.frame ...
- vue动态绑定class,tab栏