java 操作字符串需注意的几个问题
2013-08-02 22:40
260 查看
1、了解“==” 和 “equals”的区别。
在java中,所有的对象名其实中一个引用,这一点在字符串比较中可以很清楚的看到。如下:
String s1=new String("hello");
String s2=new String("hello");
boolean b1=(s1==s2)?true:false;//b1=false;
b1=(s1.equals(s2))?true;false;//b1=true
当用“==”操作符时,比较的是s1和s2两个引用是否是指向同一个对象,而只有equals才是真正比较两个字符串对象的值是否相同。
但要注意这种情况:
String s1="hello";
String s2="hello";
boolean b1=(s1==s2)?true:false;//b1=true;
由于String是不可变类,所以如果不是通过new方法创建的字符串对象,只要值相同,都是指向的同一个对象。
2、用“+”操作符操作字符串:
注意 null 和 ""
String st1=null;
String st2="st2";
String st3=""
System.out.println(st1+st2);//output: nullst2
System.out.println(st3+st2);//output: st2
所以在执行+号运算时,一定要注意字符串赋值为null和""的区别。
3、String变了吗?
String是一个不可变类,即它是只读的。如下面的操作:
String s1="hello";
s1+="world";
这个操作的过程其实是这样的,s1首先指向一个"hello"的String对象,在执行“+”操作后,s1指向一个“hello world”的String对象。而之前的“hello”对象是没有释放的。
从这可以得出下面两个结论:
1)如果程序中有大量的String类值的变更操作,就会带来比较大的内存消耗。
2)在创建一个字符串时,没必要这么做:new String() 来构造新的字符串对象。因为如果是这种方式创建String的话,如果两个字符串引用s1和s2的值相等,它们仍然指向不同的对象。但是如果是这样,s1="hello";s2="hello",这时,s1和s2指向的是同一个对象。
在java中,所有的对象名其实中一个引用,这一点在字符串比较中可以很清楚的看到。如下:
String s1=new String("hello");
String s2=new String("hello");
boolean b1=(s1==s2)?true:false;//b1=false;
b1=(s1.equals(s2))?true;false;//b1=true
当用“==”操作符时,比较的是s1和s2两个引用是否是指向同一个对象,而只有equals才是真正比较两个字符串对象的值是否相同。
但要注意这种情况:
String s1="hello";
String s2="hello";
boolean b1=(s1==s2)?true:false;//b1=true;
由于String是不可变类,所以如果不是通过new方法创建的字符串对象,只要值相同,都是指向的同一个对象。
2、用“+”操作符操作字符串:
注意 null 和 ""
String st1=null;
String st2="st2";
String st3=""
System.out.println(st1+st2);//output: nullst2
System.out.println(st3+st2);//output: st2
所以在执行+号运算时,一定要注意字符串赋值为null和""的区别。
3、String变了吗?
String是一个不可变类,即它是只读的。如下面的操作:
String s1="hello";
s1+="world";
这个操作的过程其实是这样的,s1首先指向一个"hello"的String对象,在执行“+”操作后,s1指向一个“hello world”的String对象。而之前的“hello”对象是没有释放的。
从这可以得出下面两个结论:
1)如果程序中有大量的String类值的变更操作,就会带来比较大的内存消耗。
2)在创建一个字符串时,没必要这么做:new String() 来构造新的字符串对象。因为如果是这种方式创建String的话,如果两个字符串引用s1和s2的值相等,它们仍然指向不同的对象。但是如果是这样,s1="hello";s2="hello",这时,s1和s2指向的是同一个对象。
相关文章推荐
- Java中String类(字符串操作)的10个常见问题和解决方法
- java学习笔记---Java可变参数方法重载时要注意的几个问题
- Java可变参数方法重载时要注意的几个问题
- java程序员在面试时要注意的几个问题
- JAVA分割字符串注意问题
- Java继承需要注意的几个问题
- C语言编写字符串拷贝函数应注意的几个问题
- Java与C通信要注意的几个问题
- 使用phantomjs操作DOM并对页面进行截图需要注意的几个问题
- JAVA分割字符串注意问题
- Java可变参数方法重载时要注意的几个问题
- 使用phantomjs操作DOM并对页面进行截图需要注意的几个问题
- 用qsort对字符串数组排序需要注意的几个问题
- Java可变参数方法重载时要注意的几个问题
- Java和jsp编程中应该注意的几个常见问题
- Java跨平台编码需要注意的几个问题
- Java和jsp编程中应该注意的几个常见问题
- JAVA采用JDBC执行批处理操作注意的有关问题
- Java中要注意的几个问题
- Java中String类(字符串操作)的10个常见问题和解决方法