课后作业:动手动脑之String.equals()方法、整理String类的Length()、charAt()、 getChars()、replace()、 toUpperCase()、 toLowerCase()、trim()、toCharArray()使用说明、阅读笔记发表到博客园。

1、请运行以下示例代码StringPool.java,查看其输出结果。如何解释这样的输出结果?从中你能总结出什么?

   

       内容相同的字串常量,只保存一份以节约内存,在这段代码中s0,s1,s2实际上引用的是同一个对象。

       编译器在编译s2一句时,“+”号相当于字符串连接符,直接把两个字串连接起来得一个字串(“Hello”)。

       当直接使用new关键字创建字符串对象时,虽然值一致(都是“Hello”),但储存的地址不同,所以仍然是两个独立的对象。

2、为什么会有这样的输出结果?从中你又能总结出什么?

   

      给字串变量赋值就是两个变量s1,s2现在引用同一个字符串对象“a”,使用“+”修改s1变量的值,实际上起到了连接符的作用,实际上是得到了一个新的字符串对象,其内容为“ab”,但是它与原先s1所引用的对象”a”无关。

      所以,s1==s2返回false; 代码中的“ab”字符串是一个常量,它所引用的字符串与s1所引用的“ab”对象无关。

      String.equals()方法可以比较两个字符串的内容。

3、请查看String.equals()方法的实现代码,注意学习其实现方法。

 1 public class StringEquals
 2 { 
 3     public static void main(String[] args)
 4     {
 5         String s1=new String("HelloWorld!"); 
 6         String s2=new String("HelloWorld!");
 7         System.out.println(s1==s2); 
 8         System.out.println(s1.equals(s2));
 9         String s3="HelloWorld!"; 
10         String s4="HelloWorld!";
11         System.out.println(s3==s4);
12         System.out.println(s3.equals(s4)); 
13     }
14 }

结果截图:

   

分析:

      String类中的equals方法是对父类Object类中的equals方法的覆盖,它的判断方法是:

  ①若当前对象和比较的对象是同一个对象,即return true。也就是Object中的equals方法。

  ②若当前传入的对象是String类型,则比较两个字符串的长度,即value.length的长度。

  ③若长度不相同,则return false。

  ④若长度相同,则按照数组value中的每一位进行比较,不同,则返回false。若每一位都相同,则返回true。

  ⑤若当前传入的对象不是String类型,则直接返回false。

4、动手动脑:String类的方法可以连续调用:

1 String str=“abc”;
2 String result=str.trim().toUpperCase().concat(“defg”);

  请阅读JDK中的String类上述方法的源码,模仿其编程方式,编写一个MyCounter类,它的方法也支持上述的“级联”调用特性,其调用示例为:

1 MyCounter counter1=new MyCounter(1);
2 MyCounter counter2=counter1.increase(100).decrease(2).increase(3);
3   ......
1 public class Stringtest
2 {
3     public static void main(String[] args)
4     {
5         String str="abc";
6         String result=str.trim().toUpperCase().concat("defg");
7         System.out.println(result);
8     }
9 }    

结果截图:

    

 1 class MyCounter
 2 {
 3       int data;
 4       public void set(int g)
 5       {
 6             data=g;
 7       }
 8       public MyCounter increase(int i)
 9       {
10             MyCounter a=new MyCounter();
11             a.data=data+i;
12             return a;
13       }
14       public MyCounter decrease(int d)
15       {
16              MyCounter a=new MyCounter();
17              a.data=data-d;
18              return a;
19       }
20 }
21 public class Counter
22 {
23       public static void main(String[] args)
24       {
25             MyCounter c1=new MyCounter();
26             MyCounter c2=new MyCounter();
27             c1.set(1);
28             c2=c1.increase(100).decrease(2).increase(3);
29             System.out.println(c2.data);
30       }
31 }

结果截图:

   

5、整理String类的Length()、charAt()、 getChars()、replace()、 toUpperCase()、 toLowerCase()、trim()、toCharArray()使用说明、阅读笔记发表到博客园。

  Length():获取字串长度, java中的length属性是针对数组和字符串String说的,如果想看这个数组或字符串的长度则用到length()这个方法.。

  charAt():获取指定位置的字符。

  getChars():获取从指定位置起的子串复制到字符数组中。

  replace():子串替换,str.replace(char o,char n)返回一个新的字符串,它是通过用n替换此字符串中出现的所有o而生成的。

  toUpperCase()、 toLowerCase():大小写转换,str.toUpperCase/()str.toLowerCase(),将所有在这个字符串的字符转换为大、小写。

  trim():去除头尾空格。

  toCharArray():将字符串对象转换为字符数组,str.toCharArray()   返回一个新分配的字符数组,它的长度是此字符串的长度,而且内容被初始化为包含此字符串表示的字符序列。

posted @ 2017-10-26 17:05  我命倾尘  阅读(395)  评论(0编辑  收藏  举报