JAVA里面判断两个字符是否相等
2022/4/2 1:19:27
本文主要是介绍JAVA里面判断两个字符是否相等,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
JAVA里面判断两个字符串是否相等
== 比较引用 , equals 比较值
String a = "abc"; String b = "abc"; System.out.println(a == b); System.out.println(a.equals(b)); String c = new String("abc"); String d = new String("abc"); System.out.println(c == d); // 在堆里面创建两个对象,所以引用不同 System.out.println(c.equals(d)); // equals() 比较的是对象的值 String e = "ab" + "c"; System.out.println(a == e); System.out.println(a.equals(e)); // 在编译的时候在堆里面创建对象 true true false true true true
- 无论在常量池里面还是堆中的对象,用equals()方法比较的都是对象的内容
图解
- new的时候,会在内存创建一个对象
例子
public class Example{ String str = new String("good"); char[ ] ch = { 'a' , 'b' , 'c' }; public static void main(String args[]){ Example ex = new Example(); ex.change(ex.str,ex.ch); System.out.print(ex.str + " and "); System.out.print(ex.ch); } public void change(String str,char ch[ ]){ str = "test ok"; ch[0] = 'g'; } } 结果: good and gbc
-
String确实是个不可变对象,这个不可变是JDK特有的
-
String str = new String("good");是在编译时在堆栈中创建对象和分配内容,而在传参的时候,传递的是地址,把外面的str引用地址复制了一份给方法内的str而不是里面的内容
-
题目中的形参str只是原引用ex.str的一个引用副本,传的是一个副本地址值,这个值与ex.str地址值是不一样的,但是它们同时指向了堆中的对象new String("good"),当你在函数中改变形参也就是地址的副本值也就是这句str="test ok"只是将副本地址指向常量"test ok",并没有改变原ex.str的指向方向,它还是指向对象new String("good")的
-
char数组与String一样传的也是地址的副本,但是关键是形参ch它没有新的指向 ch[0]只是ch在指向原对象时改变了对象的内部结构, 所以在ex.ch指向与它是同一个对象的情况下当然也会随之变化
-
图解:
总结
直接赋值而不是使用new关键字给字符串初始化,在编译时就将String对象放进字符串常量池中;使用new关键字初始化字符串时,是在堆栈区存放变量名和内容;字符串的拼接操作在程序运行时,才在堆中创建对象。一般,可以认为使用"=="比较的是引用,equals比较的是内容。
凡事有交代,事事有回音
这篇关于JAVA里面判断两个字符是否相等的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?