1.请运行以下示例代码StringPool.java,查看其输出结果。如何解释这样的输出结果?从中你能总结出什么?
在Java中,内容相同的字串常量(“Hello”)只保存一份以节约内存,所以s0,s1,s2实际上引用的是同一个对象。 编译器在编译s2一句时,会去掉“+”号,直接把两个字串连接起来得一个字串(“Hello”)。这种优化工作由Java编译器自动完成。 当直接使用new关键字创建字符串对象时,虽然值一致(都是“Hello”),但仍然是两个独立的对象。
2.为什么会有上述的输出结果?从中你又能总结出什么?
给字串变量赋值意味着:两个变量(s1,s2)现在引用同一个字符串对象“a”!
String对象的内容是只读的,使用“+”修改s1变量的值,实际上是得到了一个新的字符串对象,其内容为“ab”,它与原先s1所引用的对象”a”无关,所以,s1==s2返回false;
代码中的“ab”字符串是一个常量,它所引用的字符串与s1所引用的“ab”对象无关。 但是若"s1="ab"",再判断“s1=="ab"",结果为true。
String.equals()方法可以比较两个字符串的内容。
3.请查看String.equals()方法的实现代码,注意学习其实现方法。
publicclass StringEquals { publicstaticvoid main(String[] args) { String s1=new String("Hello"); String s2=new String("Hello"); System.out.println(s1==s2); System.out.println(s1.equals(s2)); String s3="Hello"; String s4="Hello"; System.out.println(s3==s4); System.out.println(s3.equals(s4)); } }
equals()或equalsIgnoreCase()方法比较两字串内容是否相同,使用==比较两字串变量是否引用同一字串对象;
compareTo:使用字典法进行比较,返回0表两字串相等,小于返回负值,大于返回正值;
regionMatches:比较两字串中的某一部分是否相等。
4.Length():获取字串长度
1 java中的length属性是针对数组说的,比如说你声明了一个数组,想知道这个数组的长度则用到了length这个属性.
2 java中的length()方法是针对字符串String说的,如果想看这个字符串的长度则用到length()这个方法.
3.java中的size()方法是针对泛型集合说的,如果想看这个泛型有多少个元素,就调用此方法来查看!
charAt():获取指定位置的字符
str.charAt() :方法返回指定索引处的char值。索引范围是从0到length() - 1。对于数组索引,序列的第一个char值是在索引为0,索引1,依此类推。
getChars():获取从指定位置起的子串复制到字符数组中。
str.getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
要复制的第一个字符在索引srcBegin处,被复制的最后一个字符是在的索引srcEnd1即要复制的字符总数是srcEnd srcBegin处。
字符被复制到子数组的夏令时开始在指数dstBegin和结束于索引:dstbegin + (srcEnd-srcBegin) - 1
replace():子串替换
str.replace(char oldChar,char newChar)返回一个新的字符串,它是通过用newChar替换此字符串中出现的所有oldChar而生成的。
toUpperCase()、 toLowerCase():大小写转换
str.toUpperCase/()str.toLowerCase(),将所有的字符在这个字符串为大写。
trim():去除头尾空格:
str.trim(),该方法返回一个该字符串的副本,但将该字符串的开头和结尾的白色空格去掉;如果这个字符串头尾没有空白,将返回一个字符串的副本。
toCharArray():将字符串对象转换为字符数组
str.toCharArray() 返回一个新分配的字符数组,它的长度是此字符串的长度,而且内容被初始化为包含此字符串表示的字符序列。