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);
    }
}

运行结果

目录
相关文章
|
3月前
|
SQL JSON Java
告别字符串拼接:用Java文本块优雅处理多行字符串
告别字符串拼接:用Java文本块优雅处理多行字符串
419 108
|
5月前
|
SQL JSON Java
告别拼接噩梦:Java文本块让多行字符串更优雅
告别拼接噩梦:Java文本块让多行字符串更优雅
596 82
|
5月前
|
自然语言处理 Java Apache
在Java中将String字符串转换为算术表达式并计算
具体的实现逻辑需要填写在 `Tokenizer`和 `ExpressionParser`类中,这里只提供了大概的框架。在实际实现时 `Tokenizer`应该提供分词逻辑,把输入的字符串转换成Token序列。而 `ExpressionParser`应当通过递归下降的方式依次解析
372 14
|
9月前
|
存储 缓存 安全
Java 字符串详解
本文介绍了 Java 中的三种字符串类型:String、StringBuffer 和 StringBuilder,详细讲解了它们的区别与使用场景。String 是不可变的字符串常量,线程安全但操作效率较低;StringBuffer 是可变的字符串缓冲区,线程安全但性能稍逊;StringBuilder 同样是可变的字符串缓冲区,但非线程安全,性能更高。文章还列举了三者的常用方法,并总结了它们在不同环境下的适用情况及执行速度对比。
219 17
|
SQL Java 索引
java小工具util系列2:字符串工具
java小工具util系列2:字符串工具
322 83
|
9月前
|
存储 缓存 安全
Java字符串缓冲区
字符串缓冲区是用于处理可变字符串的容器,Java中提供了`StringBuffer`和`StringBuilder`两种实现。由于`String`类不可变,当需要频繁修改字符串时,使用缓冲区更高效。`StringBuffer`是一个线程安全的容器,支持动态扩展、任意类型数据转为字符串存储,并提供多种操作方法(如`append`、`insert`、`delete`等)。通过这些方法,可以方便地对字符串进行添加、插入、删除等操作,最终将结果转换为字符串。示例代码展示了如何创建缓冲区对象并调用相关方法完成字符串操作。
266 13
|
存储 安全 Java
Java零基础-字符串详解
【10月更文挑战第18天】Java零基础教学篇,手把手实践教学!
246 60
|
Java 数据库
java小工具util系列1:日期和字符串转换工具
java小工具util系列1:日期和字符串转换工具
232 26
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
367 8