面试准备:(String类&&equal与==)

String类:

    1:String类方法以及特点:

              特点:

                     1:所有数据类型遇到String时,都会自动转换成String类型.

                     2:不可继承,因为是final修饰的类

              相关笔记:借鉴: https://blog.csdn.net/rngweskt/article/details/82597870     

        String类的判断功能:

                   * boolean equals(Object obj):比较字符串的内容是否相同,区分大小写
                   * boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写
                   * boolean contains(String str):判断大字符串中是否包含小字符串
                   * boolean startsWith(String str):判断字符串是否以某个指定的字符串开头
                   * boolean endsWith(String str):判断字符串是否以某个指定的字符串结尾
                   * boolean isEmpty():判断字符串是否为空。

        ""和null的区别

                   "  "是字符串常量,同时也是一个String类的对象,既然是对象当然可以调用String类中的方法
      null是空常量,不能调用任何的方法,否则会出现空指针异常,null常量可以给任意的引用数据类型赋值

       String类的获取功能

                   * int length():获取字符串的长度。
                   * char charAt(int index):获取指定索引位置的字符
                   * int indexOf(int ch):返回指定字符在此字符串中第一次出现处的索引。
                   * int indexOf(String str):返回指定字符串在此字符串中第一次出现处的索引。
                   * int indexOf(int ch,int fromIndex):返回指定字符在此字符串中从指定位置后第一次出现处的索引。
                   * int indexOf(String str,int fromIndex):返回指定字符串在此字符串中从指定位置后第一次出现处的索引。
                   * String substring(int start):从指定位置开始截取字符串,默认到末尾。
                   * String substring(int start,int end):从指定位置开始到指定位置结束截取字符串。

       String的转换功能:


                    * byte[] getBytes():把字符串转换为字节数组。
                    * char[] toCharArray():把字符串转换为字符数组。
                    * static String valueOf(char[] chs):把字符数组转成字符串。
                    * static String valueOf(int i):把int类型的数据转成字符串。
                              * 注意:String类的valueOf方法可以把任意类型的数据转成字符串。
                    * String toLowerCase():把字符串转成小写。(了解)
                    * String toUpperCase():把字符串转成大写。
                    * String concat(String str):把字符串拼接。

       String的替换功能


                   * String replace(char old,char new)
                   * String replace(String old,String new)

       强转String 和toString()的区别:           

                   public class Test{
                   public static void main(String args[]) {

                            Object ob="我是Object";

                            Name name=new Name();

                           String a=(String)ob; //强转
                           String b=ob.toString(); //toString

                           String c=name.toString(); //toString
                         //String d=(String)name; //强转 报错
                                      }
                             }
                   class Name{}

toString方法是把一切对象都转换成String类,但是最终的结果有可能不是我们想要的内容,但是能编译通过;上面的程序Object类和自己建立的Name都能toString编译通过。

而强转(String)不一定,必须满足继承关系。String类是Object类的子类,通过编译。但是String类和Name类没有继承关系,因此编译不通过。

    2:equals与==的区别:

问题1:


String s1 = "abc";
String s2 = "abc";
System.out.println(s1 == s2);

这里的结果是true. 由于字符串是常量(内存中创建对象后不能修改), 而且字符串在程序中经常使用. 所以Java对其提供了缓冲区. 缓冲区内的字符串会被共享. 使用双引号的形式定义字符串常量就是存储在缓冲区中的. 使用"abc"时会先在缓冲区中查找是否存在此字符串, 没有就创建一个, 有则直接使用. 第一次使用"abc"时会在缓冲区中创建, 第二次则是直接引用之前创建好的了.


问题2:

String s1 = new String("abc");
String s2 = new String("abc");
System.out.println(s1 == s2);

这里的结果是false. 使用构造函数创建的字符串都是在缓冲区外面创建一个新的. 所以只要是使用构造函数创建的字符串, 和任何字符串都不会相等.


问题3:

String s1 = "abc";
String s2 = "a";
String s3 = "bc";
String s4 = s2 + s3;
System.out.println(s1 == s4);

这里的结果是false. Java中字符串的相加其内部是使用StringBuilder类的append()方法和toString()方法来实现的. 而StringBuilder类toString()方法返回的字符串是通过构造函数创建的.


问题4:

String s1 = "abc";
String s2 = "a" + "bc";
System.out.println(s1 == s2);

这里的结果是true. 其实这里的s2并没有进行字符串相加, 两个双引号形式的字符串常量相加, 在编译的时候直接会被转为一个字符串"abc".


问题5:

String str = "abc";
str.substring(3);
str.concat("123");
System.out.println(str);           

这里结果是"abc". 由于字符串是常量(内存中创建对象后不能修改), 该类中所有方法都不会改变字符串的值. 如果希望使用一个可变的字符串, 可以使用StringBuilder或StringBuffer类.
 

==”是Java提供的关系运算符,主要功能是进行数值相等判断的,如果用在String对象上表示的是内存地址数值的比较。

“equals()”是由String提供的一个方法,此方法专门负责进行字符串内容的比较。

备注:通过查看源代码,equals()方法底层依赖的是==号,那么,在所有没有重写equals()方法的类中,调用equals()方法其实和使用==号的效果一样,也是比较的地址值。(equals()方法大部分都被重写了)

猜你喜欢

转载自blog.csdn.net/qq_31051117/article/details/88054323