1.用==比较String
String a = "abc";String b = "abc";String c = new String("abc");String d = new String("abc");Syso(a == b);Syso(c == d);Syso(a == c)//true false false //a和b创建为引用,指向同一地址复制代码
** ==比较引用类型时,比较的是虚地址。String类型比较特殊,当使用=赋值时,相同内容的字符串本质是同一个对象,虚地址相同。而使用new赋值时,每次都会创建一个新的对象。**
2.String类用=赋值
public static void change(String str){ str = "abc"; Syso("change_str="+str);}public static void main(String[] args){ String str = "123"; change(str); Syso("main_str="str);}//change_str=abc//main_str=123复制代码
** String是引用类型,是比较特殊的类,是只读对象。对String有任何改变,都将返回一个新的对象。**
3.用equals比较String
public static void main(String[] args){ String str1="abc"; String str2="abc"; String str3=new String("abc"); String str4=new String("abc"); Syso(str1.equals(str2)); Syso(str3.equals(str4)); Syso(str1.equals(str3));}//equals 在 object类中定义 //equals 比较的是两个对象的虚地址,只有当虚地址一样时才会返回true//但是在部分类中会重写equals,如String//在String中,equals比较的是两个String的值//true true true复制代码
** equals()方法是在Object类中定义的,Java API中的类都默认有该方法,默认情况下是比较两个对象的虚地址。但是很多类对其进行了覆盖。String类就将equals方法进行了覆盖,修改为比较两个字符串的字符序列,只要字符序列相同的字符串,返回值就为true。**
4.如何判断一个String是不是一个空字符串
if(str != null && str.equals(""))//要判断字符串是否为空,否则当字符串没有初始化时,会出现空指针错误复制代码
** null指的是空指针,而空字符串指的是str已经被初始化,不过值为空,即""。在判断的时候,一定判断其不是空指针,再调用equals判断其字符序列是否为空,否则会发生空指针异常。**
5.字符串的不可变性质
String bar="abc";bar.toUpperCase();Syso(bar);//abc//bar = bar.toUpperCase(); 则输出ABC//字符串调用任何方法是不能改变字符串的值复制代码
** 字符串类具有不可变的性质,也就是一旦一个字符串被初始化到内存中,其值就不会被改变。对它调用任何方法都将返回一个新的对象。**
6.字符串与基本数据类型的转换
题目:有字符串变量str="123",如何转换成int类型123? String str="123"; int i = Integer.parseInt(str);复制代码
** 在实际应用开发过程中,经常需要把字符串转换成整型或浮点型的数值进行运算。Integer/Double等包装器类都定义了parseXXX方法,可以进行转换。**
7.使用new关键字创建字符串对象
题目:String str = new String("abc");创建了几个对象?复制代码
** 创建了两个或一个对象。 由于字符串是一个非常常用的类型,所以JVM中存在一个字符串常量池,保存了大量的字符串对象,并共享使用。使用new String("abc");创建对象时,如果常量池中没有abc,首先会在对象池中创建字符串abc,然后在堆中创建字符串对象,赋值给str。如果常量池中已经有abc,则创建一个对象。**
8.用==比较字符串常量
题目:下面语句输出结果是什么?Syso("china"+"soft"=="chinasoft");//trueString str1 = new String("abc");String str2 = new String("abc");Syso(str1==str2);//false复制代码
** ==比较的是引用的虚地址。对于字符串常量来说,存在于字符串共享池里,只要字符串序列相同的字符串,在共享池莉都被“合并”,引用同一个对象,所以虚地址也相同。**
9.把基本数据类型转换成String
题目:有变量int i = 123;如何把i转换成String对象?int i = 123;String str = String.valueOf(i);Syso(str);复制代码
** String类中重载了一系列的valueOf方法,方法参数为boolean、int、float、double等基本数据类型,方法为静态方法,返回值为字符串,可以把参数转换成String对象。**
10.如何比较String的字典顺序
题目:有字符串 str1="international",str2="chinasoft" 如何使用代码比较他们的字典顺序?String temp = "";String str1 = "international";String str2 = "chinasoft";if(str1.compareTo(str2)>0){ temp = str2; str2 = str1; str1 = temp;}Syso(str1+" "+str2);复制代码
** compareTo方法是接口中Comparable定义的,API中很对类都对其进行了实现。String类实现了该接口,重写了compareTo方法。该方法用来比较字符串的字典顺序,返回值为正数,表示str1大于str2,即字典中str1排在str2后。返回值为负数,表示str1小于str2.返回值为0,表示相同。**