Java字符串比较

简介: 1.equals()方法2.==3.equalsIgnoreCase()方法4.compareTo()方法

1.equals()方法

逐个比较两个字符串的每个字符。当两个字符完全相同(有相同的字符和长度),返回true,否则返回false

publicclassDemo {
publicstaticvoidmain(String[] args) {
Stringstr1="abcdef";
Stringstr2="Abcdef";
booleanret=str1.equals(str2);
System.out.println(ret);
    }
}

运行结果

2.==

使用==进行比较时

对于基本数据类型:比较的是数据值

对于引用数据类型:比较的是地址值

publicclassDemo {
publicstaticvoidmain(String[] args) {
Stringstr1="abcdef";
Stringstr2="abcdef";
Stringstr3=newString("abcdef");
Stringstr4=newString("abcdef");
System.out.println(str1==str2);
System.out.println(str1==str3);
System.out.println(str3==str4);
    }
}

运行结果

分析

JVM为了避免字符串的重复创建,节省内存,提升性能,维护了一块特殊的内存空间,即字符串池(String Pool)

当创建一个字符串时,JVM首先会在字符串池中查找是否存在该字符串,若不存在,则在字符串池中创建该字符串;若字符串中已存在该字符串,则直接将池中字符串的地址返回

 str1与str2的地址相同,所以str1 == str2 的结果为true

当通过new的方式创建对象时,创建出来的对象都是存放在堆栈里面的,每new一次则是在堆栈中创建一个新的对象。

 

str3与str1、str4的地址不同,所以str1 == str3 、str3 == str4的结果都为false

3.equalsIgnoreCase()方法

equalsIgnoreCase()方法的作用与语法与equals()方法相同,唯一的不同点在于equalsIgnoreCase()方法在比较时不区分大小写

publicclassDemo {
publicstaticvoidmain(String[] args) {
Stringstr1="abcdef";
Stringstr2="Abcdef";
booleanret=str1.equalsIgnoreCase(str2);
System.out.println(ret);
    }
}

运行结果

4.compareTo()方法

比较两个字符串,逐一比较每个字符,当相比较的两个字符不同时,返回不同字符的ASCII码的差值

publicclassDemo {
publicstaticvoidmain(String[] args) {
Stringstr1="abcdef";
Stringstr2="abcDef";
intret=str1.compareTo(str2);
System.out.println(ret);
    }
}

运行结果

若两个字符串长度不同,但参与比较的字符相同,则返回两个字符串长度的差值

publicclassDemo {
publicstaticvoidmain(String[] args) {
Stringstr1="abcdef";
Stringstr2="abc";
intret=str1.compareTo(str2);
System.out.println(ret);
    }
}

运行结果

返回正数表示str1 > str2 ,返回负数表示str1 < str2,返回0表示str1 与str2相等

publicclassDemo {
publicstaticvoidmain(String[] args) {
Stringstr1="abc";
Stringstr2="abcdef";
intret=str1.compareTo(str2);
System.out.println(ret);
    }
}

运行结果

目录
相关文章
|
18天前
|
安全 Java API
【Java字符串操作秘籍】StringBuffer与StringBuilder的终极对决!
【8月更文挑战第25天】在Java中处理字符串时,经常需要修改字符串,但由于`String`对象的不可变性,频繁修改会导致内存浪费和性能下降。为此,Java提供了`StringBuffer`和`StringBuilder`两个类来操作可变字符串序列。`StringBuffer`是线程安全的,适用于多线程环境,但性能略低;`StringBuilder`非线程安全,但在单线程环境中性能更优。两者基本用法相似,通过`append`等方法构建和修改字符串。
43 1
|
23天前
|
Java 编译器
【Java基础面试三十】、 两个字符串相加的底层是如何实现的?
这篇文章解释了Java中两个字符串相加的底层实现:对于字符串直接量的拼接,编译器在编译时会进行优化合并;而对于包含变量的字符串拼接,编译器会采用`StringBuilder`进行优化,自动创建实例并调用`append()`方法来拼接字符串。
|
3天前
|
算法 Oracle Java
Java字符串拼接技术演进及阿里巴巴的贡献
本文主要讲述了Java字符串拼接技术的演进历程,以及阿里巴巴贡献的最新实现 PR 20273。
|
8天前
|
算法 Oracle Java
Java字符串拼接技术演进及阿里巴巴的贡献
本文主要讲述了Java字符串拼接技术的演进历程,以及阿里巴巴贡献的最新实现 PR 20273。
|
19天前
|
存储 Java
|
19天前
|
存储 Java
如何在 Java 中打印字符串数组列表
【8月更文挑战第23天】
26 2
|
19天前
|
存储 Java API
|
23天前
|
安全 Java 编译器
【Java基础面试二十九】、说一说你对字符串拼接的理解
这篇文章讨论了Java中字符串拼接的四种常用方式(使用`+`运算符、`StringBuilder`、`StringBuffer`和`String`类的`concat`方法),每种方式适用的场景,以及在不同情况下的性能考量。
|
22天前
|
Java 测试技术
Java系列之判断字符串是为空或者null
这篇文章介绍了如何在Java中使用`isEmpty()`方法判断字符串是否为空或`null`,并提供了相应的测试用例来演示其用法。