String的==与equal和null

转载 2011年01月18日 11:28:00

1、String 的==与equal()

在对字符串的相等判断,==判断的是地址是否相同,equal()判断的是字符值是否相同。大多数时候==跟equal()的结果都是相同的。这是因为String对象是不变模式的,如果你不是明确地new一个String对象,Java对于String对象的保存默认的是会把新生成的String 对象放到一个缓冲区,然后每次判断缓冲区中是否已经有了这个对象,如果有了,那么后建立的同样字符值的String对象也会指向最初建立是该字符值对象的地址。也就是说字符值相同的时候,大多数情况下地质也是相同的。==与equal()效果是相同的。但是当对象是str = new String(“abc”)生成的而不是直接str = “abc”这样赋值生成,或者经过了一些字符串连接处理,或者通过StringBuffer等对象生成,都会在内存中开辟新的地址的,这个时候==和 equal()结果是不同的。
是不是稍微有些复杂?这里需要一些关于内存,堆栈,对象保存方面的理解。我不想纠缠于这个问题的讨论。如果不能理解,那么只要记住如果你想要判断两个字符串的字符值是否相等,没有别的要求的时候,那么请使用equal()而不是==,至于什么时候需要使用==,我想当你需要的时候,你自然就会明白了。实际上,对于字符串的判断,我们很少需要用==的。
2、关于str.equal(“abc”)和”abc”.equal(str)
这个好像争论也挺多的,第一种常量写在后面可能符合大多数人的习惯,也符合我们的逻辑思维。但是需要多一个str是否为null的判断。否则这里是有可能出现异常的。而后一种写法不需要多做关于是否为null这个判断。就我个人喜好来说,比较喜欢后一种写法。
3、关于String的null
/**
* 测试java的String为null 的情况
* create date:2009-6-3
* author:Administrator
*
*/
public static void testNull(){
String a= null,b = null,c="呵呵";
System.out.println(a == null);
System.out.println(a+b+c);
}
方法运行结果:
true
nullnull呵呵
所以大家要注意了做字符串合并操作时,别忘记判断null,否则结果会不太让你爽啊!

C#中null和空的区别,==和Equals()方法的区别

问题来自于对控件的Text属性理解错误。一:null和空的区别1.声明的string类型的变量和属性以及字段在未赋值的情况下均为null,这个null不仅仅表示为无字符,更表示为空的引用。比如:str...
  • chengzi120
  • chengzi120
  • 2010年05月21日 21:29
  • 5161

关于判断C#的两个string是否相等的问题

char[] ch = new char[] { 'a', 'a', 'a' }; string a1 = new string(ch); string...
  • flywithtn
  • flywithtn
  • 2015年03月05日 09:57
  • 2158

java的String=a; a==null和a.equals(null)这两个判断有什么区别

转载地址:http://zhidao.baidu.com/link?url=TiUvedxlF4YqktZl8shEigzYnSYA4hrixykEggfs7JbmSbl7bACBcpt2HpRiwA...
  • ChilseaSai
  • ChilseaSai
  • 2015年03月11日 11:18
  • 711

String中==和equal()的区别

==是判断两个字符窜引用是否相等。 .equal()判断的是两个字符窜值是否相等。 不同对象总是产生不同的散列值,即便是他们是相等的值也可以。 因此,如果你想要判断两个字符串是否相等你最好使用.equ...
  • l975764577
  • l975764577
  • 2014年03月09日 19:18
  • 1302

Java 中关于String的空对象(null) ,空值(empty),空格 的总结

Java 中关于String 对象的空对象(null), 空值(""),空格(" ")对于很多人来说很模糊,下面将分别介绍一下他们的用法:定义,判断,运算。 首先,先上代码: private vo...
  • wikiday
  • wikiday
  • 2013年05月24日 13:26
  • 23224

Java String中理解起来模糊的东西,我来给我扫扫盲。(String类的intern() 、equal()、 == )

首先要知道String是对象,不是简单的数据类型,不是int,或者long之类的简单数据类型,他和你自定义的数据对象Object一样,真实值是存放在堆内存里面的。 自己看到的都只是一个引用。始终记得这...
  • qq_27093465
  • qq_27093465
  • 2016年07月26日 09:37
  • 1486

C# 中==和Equal的区别

http://new-fighter.iteye.com/blog/1634800 今天突然看到一种情况,颠覆了我对这比较使用方法的判断。  于是开始在网上找资料,但几乎都是Java的,好...
  • OnafioO
  • OnafioO
  • 2016年02月01日 13:56
  • 893

String中对NULL和""的判断

------三种错误的用法: 错误用法一: if (name == "") { //do something } 2,错误用法二: if (name.equals("")) { //do somet...
  • qq_27918787
  • qq_27918787
  • 2016年09月11日 21:03
  • 4942

String中的null,"",以及String s;等等的区别详解

1、判断一个引用类型数据是否null。 用==来判断。2、释放内存,让一个非null的引用类型变量指向null。这样这个对象就不再被任何对象应用了。等待JVM垃圾回收机制去回收。===========...
  • Kevin_3
  • Kevin_3
  • 2016年12月27日 20:40
  • 634

Java中string 创建对象时 “”和null的区别

string “” 和 null 区别
  • yali1990515
  • yali1990515
  • 2015年08月12日 16:52
  • 3901
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:String的==与equal和null
举报原因:
原因补充:

(最多只允许输入30个字)