java String 类的一些理解 关于==、equals、null_java

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,否则结果会不太让你爽啊!

时间: 2024-09-19 20:32:53

java String 类的一些理解 关于==、equals、null_java的相关文章

java String类常量池分析及"equals"和"==”区别详细介绍_java

java "equals"和"=="异同 首先简单说一下"equal"和"==" ==操作对于基本数据类型比较的是两个变量的值是否相等, 对于引用型变量表示的是两个变量在堆中存储的地址是否相同, 即栈中的内容是否相同 equals操作表示的两个变量是否是对同一个对象的引用, 即堆中的内容是否相同. 综上,==比较的是2个对象的地址,而equals比较的是2个对象的内容. 再简单介绍一下String类 String类 又称作不可

java String类创建对象相关

问题描述 java String类创建对象相关 "执行语句 String str = new String("abc") 时,不管字符串池中是否存在"abc" ,直接新建一个字符串"abc"(注意:新建的字符串"abc" 不是在字符串池中),然后将其赋给str." 百度上看到这段,有几个疑问: 1.之前认为new创建String对象时,会先判断常量池中是否存在"abc",如果有就不在常量

Java String类的常用方法汇总_java

一.String类 String类在java.lang包中,java使用String类创建一个字符串变量,字符串变量属于对象.java把String类声明的final类,不能有类.String类对象创建后不能修改,由0或多个字符组成,包含在一对双引号之间.二.String类对象的创建 字符串声明:String stringName; 字符串创建:stringName = new String(字符串常量);或stringName = 字符串常量;三.String类构造方法1.public Str

Java String 类

怎么描述String的重要性呢?我想我无论怎么描述都没办法表达它的重要性,所以,认真学习String对于我们开发人员来说是非常重要的.首先我们要明白,String类是用来操作和创建字符串的.比如说:String str = "我是一个字符串":String str2 = new String("我也是一个字符串")接着需要明白的也是最需要记住的,String不属于java内置数据类型,也就是不属于8种基本数据类型.String是一个对象,并且,String是一个非常

java string类的常用方法详细介绍_java

String : 字符串类型 一.构造函数 复制代码 代码如下: String(byte[ ] bytes):通过byte数组构造字符串对象. String(char[ ] value):通过char数组构造字符串对象. String(Sting original):构造一个original的副本.即:拷贝一个original. String(StringBuffer buffer):通过StringBuffer数组构造字符串对象. 例如: 复制代码 代码如下: byte[] b = {'a',

Java String类怎么查找替换啊,用通配符

问题描述 我有一个字符串line=dffdf(abd88*※--%¥#◎)mnbmc:我想用通配符的办法,line.replace()或line.replaceALL()来把括号里的东西去掉,该怎么写?可能line=(abd88*※--%¥#◎),连括号都去掉.谢谢 解决方案 解决方案二:我现在用Stringtemp=line.substring(line.indexOf("("),line.indexOf(")")+1);line=line.replace(tem

马士兵J2SE-第六章-常用类-String类、StringBuffer类、枚举ENUM

  public class test { public static void main(String[] args) { String s1="hello"; String s2="world"; String s3="hello"; System.out.println(s1==s3); s1=new String("hello"); s2=new String("hello"); System.ou

java-JAVA String类相关疑问

问题描述 JAVA String类相关疑问 新手疑问 对String类的replace方法有点不懂 如果我想用null替换一些有不定长的字符串 比如字符串里有许多() ()里也有内容 该怎么替换呢? 解决方案 asd(ahd)asd(hjk)qws String str="asd(ahd)asd(hjk)qws "; String[] arr={"(ahd)","(hjk)","w"}; for(int i=0;i<ar

Java基础之010-深入理解Java的String类

Java基础之010-深入理解Java的String类                                        老帅        1. 首先String不属于8种基本数据类型,String是一个类.  因为对象的默认值是null,所以String的默认值也是null:但它又是一种特殊的对象,有其它对象没有的一些特性.  2. new String()和new String("")都是申明一个新的空字符串,是空串不是null:  3. String对象实例化