javaString类的一些理解关于==、equals、null
理解 关于 一些 null equals javastring
2023-06-13 09:14:09 时间
1、String的==与equal()
在对字符串的相等判断,==判断的是地址是否相同,equal()判断的是字符值是否相同。大多数时候==跟equal()的结果都是相同的。这是因为String对象是不变模式的,如果你不是明确地new一个String对象,Java对于String对象的保存默认的是会把新生成的String对象放到一个缓冲区,然后每次判断缓冲区中是否已经有了这个对象,如果有了,那么后建立的同样字符值的String对象也会指向最初建立是该字符值对象的地址。也就是说字符值相同的时候,大多数情况下地质也是相同的。==与equal()效果是相同的。但是当对象是str=newString(“abc”)生成的而不是直接str=“abc”这样赋值生成,或者经过了一些字符串连接处理,或者通过StringBuffer等对象生成,都会在内存中开辟新的地址的,这个时候==和equal()结果是不同的。
是不是稍微有些复杂?这里需要一些关于内存,堆栈,对象保存方面的理解。我不想纠缠于这个问题的讨论。如果不能理解,那么只要记住如果你想要判断两个字符串的字符值是否相等,没有别的要求的时候,那么请使用equal()而不是==,至于什么时候需要使用==,我想当你需要的时候,你自然就会明白了。实际上,对于字符串的判断,我们很少需要用==的。
2、关于str.equal(“abc”)和”abc”.equal(str)
这个好像争论也挺多的,第一种常量写在后面可能符合大多数人的习惯,也符合我们的逻辑思维。但是需要多一个str是否为null的判断。否则这里是有可能出现异常的。而后一种写法不需要多做关于是否为null这个判断。就我个人喜好来说,比较喜欢后一种写法。
3、关于String的null
/**
*测试java的String为null的情况
*createdate:2009-6-3
*author:Administrator
*
*/
publicstaticvoidtestNull(){
Stringa=null,b=null,c="呵呵";
System.out.println(a==null);
System.out.println(a+b+c);
}
方法运行结果:
true
nullnull呵呵
所以大家要注意了做字符串合并操作时,别忘记判断null,否则结果会不太让你爽啊!
在对字符串的相等判断,==判断的是地址是否相同,equal()判断的是字符值是否相同。大多数时候==跟equal()的结果都是相同的。这是因为String对象是不变模式的,如果你不是明确地new一个String对象,Java对于String对象的保存默认的是会把新生成的String对象放到一个缓冲区,然后每次判断缓冲区中是否已经有了这个对象,如果有了,那么后建立的同样字符值的String对象也会指向最初建立是该字符值对象的地址。也就是说字符值相同的时候,大多数情况下地质也是相同的。==与equal()效果是相同的。但是当对象是str=newString(“abc”)生成的而不是直接str=“abc”这样赋值生成,或者经过了一些字符串连接处理,或者通过StringBuffer等对象生成,都会在内存中开辟新的地址的,这个时候==和equal()结果是不同的。
是不是稍微有些复杂?这里需要一些关于内存,堆栈,对象保存方面的理解。我不想纠缠于这个问题的讨论。如果不能理解,那么只要记住如果你想要判断两个字符串的字符值是否相等,没有别的要求的时候,那么请使用equal()而不是==,至于什么时候需要使用==,我想当你需要的时候,你自然就会明白了。实际上,对于字符串的判断,我们很少需要用==的。
2、关于str.equal(“abc”)和”abc”.equal(str)
这个好像争论也挺多的,第一种常量写在后面可能符合大多数人的习惯,也符合我们的逻辑思维。但是需要多一个str是否为null的判断。否则这里是有可能出现异常的。而后一种写法不需要多做关于是否为null这个判断。就我个人喜好来说,比较喜欢后一种写法。
3、关于String的null
/**
*测试java的String为null的情况
*createdate:2009-6-3
*author:Administrator
*
*/
publicstaticvoidtestNull(){
Stringa=null,b=null,c="呵呵";
System.out.println(a==null);
System.out.println(a+b+c);
}
方法运行结果:
true
nullnull呵呵
所以大家要注意了做字符串合并操作时,别忘记判断null,否则结果会不太让你爽啊!
相关文章
- 关于prepareStatement可以防止SQL注入的理解
- 关于最短路径算法的理解
- 关于allow_url_fopen的设置与服务器的安全–不理解
- 高效沟通的秘诀_请你说说对沟通视窗的理解
- 关于对自动化测试的理解:目的与本质!(新手必看)
- 机器学习算法:UMAP 深入理解
- 关于协程的初步理解详解程序员
- 理解Linux之CPIO文件格式(cpiolinux)
- 器深入理解Oracle服务器:实力与精准的企业数据管理(什么是oracle服务)
- Linux驱动开发简史:深入理解驱动过程(linux驱动过程)
- 理解Oracle触发器:种类及其应用(oracle触发器类型)
- 深入理解Oracle数据库中的触发器类型(oracle触发器类型)
- 深入理解Oracle数据库的触发器类型(oracle触发器类型)
- 深入理解Linux退出函数的实现和使用方法(linux退出函数)
- 深入理解Oracle中关于段的说法(oracle关于段的说法)
- MySQL事务你需要了解的一切(mysql中事务的理解)
- 深入理解Redis基本概念(关于redis的基本概念)
- Oracle事务理解事务定义及应用(oracle 事务定义)
- 深入理解Oracle中的函数概念(oracle中的函数概念)
- 谬误谬论关于Redis的错误理解(redis说法不正确的是)
- 关于HttpHandler与HttpModule的理解和应用方法
- 深入理解JavaScript是如何实现继承的
- 关于背包问题的一些理解和应用