第七天-Java常用类之一

来源:互联网 发布:android apk安装源码 编辑:程序博客网 时间:2024/05/25 23:58

1 String类的概述和使用

1.1 多个字符组成的一串数据          可以和字符数组进行相互转换。1.2  字符串的特点    1 字符串一旦被赋值,就不能改变。        注意:这里指的是字符串的内容不能改变,而不是引用不能改变。    2 字面值作为字符串对象和通过构造方法创建对象的不同        String ss = new String("hello");和String sss = "hello"的区别?        System.out.println(ss==sss); false        System.out.println(ss.equals(sss)); true        前者会创建两个对象(堆和字符串常量池),后者创建一个对象,在字符串常量池中    1.3 字符串题         1 ==和equals()        String s1 = new String("hello");        String s2 = new String("hello");        System.out.println(s1 == s2);// false        System.out.println(s1.equals(s2));// true        String s3 = new String("hello");        String s4 = "hello";        System.out.println(s3 == s4);// false        System.out.println(s3.equals(s4));// true        String s5 = "hello";        String s6 = "hello";        System.out.println(s5 == s6);// true        System.out.println(s5.equals(s6));// true        2 字符串的拼接        String s1 = "hello";        String s2 = "world";        String s3 = "helloworld";        System.out.println(s3 == s1 + s2);// false        System.out.println(s3.equals((s1 + s2)));// true        System.out.println(s3 == "hello" + "world");//  true        System.out.println(s3.equals("hello" + "world"));// true    字符串如果是变量相加,先开空间再拼接。    字符串如果是常量相加,先加,然后再到字符串常量池找,如果有就返回,没有则创建。1.4 字符串的功能     1 判断功能        boolean equals(Object obj) 判断字符串是否相等            JDK String类该方法的源码          public boolean equals(Object anObject) {                if (this == anObject) {                    return true;                }                if (anObject instanceof String) {                    String anotherString = (String)anObject;                    int n = value.length; // 获取比较字符数组的长度                    // 比较长度 如果长度不一致,则返回false                    if (n == anotherString.value.length) {                        char v1[] = value;                        char v2[] = anotherString.value;                        int i = 0;                        while (n-- != 0) {                            if (v1[i] != v2[i])                                return false;                            i++;                        }                        return true;                    }                }                return false;            }        boolean equalsIgnoreCase(String str) 忽略大小写,判断是否相等        boolean contains(String str) 是否包含该字符串        boolean startsWith(String str) 是否以该字符串开始        boolean endsWith(String str) 是否以该字符串结束        boolean isEmpty() 是否为空    2 获取功能        int length() 字符串长度        char charAt(int index) 下标为index的字符是什么        int indexOf(int ch) 某字符的下标,没有返回-1        int indexOf(String str) 查找某子串        int indexOf(int ch,int fromIndex) 从某个位置开始查找字符的位置        int indexOf(String str,int fromIndex) 从某个位置开始查找字符的位置        String substring(int start) 从start开始截取        String substring(int start,int end)从start开始截取end-start个字符    3 转换功能        byte[] getBytes() 转换成字节数组        char[] toCharArray() 将字符串转换为字符数组        static String valueOf(char[] chs) 将字符数组转换为字符串        static String valueOf(int i) 将整型转为字符串        String toLowerCase() 将字符串转成小写        String toUpperCase()  将字符串转成大写        String concat(String str) 字符串拼接    4 其他功能        1:替换功能             String replace(char old,char new)  替换字符            String replace(String old,String new)  替换字符串        2:去空格功能            String trim() 去掉首尾空格        3:按字典比较功能            源码: System.out.println("Hello".compareTo("Hel"));//2            int compareTo(String str)  比较字符串             public int compareTo(String anotherString) {                int len1 = value.length; // 当前字符串的长度 5                int len2 = anotherString.value.length;// 被比较字符串的长度 3                int lim = Math.min(len1, len2); //  3                char v1[] = value; // 'H','e','l','l','o'                char v2[] = anotherString.value; 'H','e','l'                int k = 0;                while (k < lim) { // 0<3                    char c1 = v1[k];                     char c2 = v2[k];                    if (c1 != c2) {                        return c1 - c2;                    }                    k++;                }                return len1 - len2;            }            int compareToIgnoreCase(String str)   比较字符串

2 StringBuffer
2.1 StringBuffer的常见功能

    1:添加功能  StringBuffer insert(int offset, char c)    2:删除功能 StringBuffer delete(int start, int end) ;              StringBuffer deleteCharAt(int index);    3:替换功能 StringBuffer replace(int start, int end, String str) ;    4:反转功能 StringBuffer reverse();    5:截取功能 (注意返回值)        String substring(int start);        String substring(int start, int end);

2.2 StringBuffer的一些特有方法

    1:String和StringBuffer相互转换        String -> StringBuffer        new StringBuffer(String str)    构造方法        StringBuffer --> String            toString()方法    2:字符串的拼接  StringBuffer append();    3:把字符串反转 StringBuffer reverse();    4:判断一个字符串是否对称 sb.equals(sb.reverse());

2.3 一些问题

1:String,StringBuffer,StringBuilder的区别是什么?     String是不可变的,StringBuffer和StringBuilder是可变的     StringBuffer是同步的,数据安全,效率低的;StringBuilder是不同步的,数据不安全,效率高2:StringBuffer和数组的区别?        StringBuffer是用于存储字符串,数组可存放不同的数组,但是必须是同一种数据类型。

2.4 注意:

    String作为形式参数和StringBuffer作为形式参数。    String作为参数传递,效果和基本类型作为参数传递是一样的。    StringBuffer作为参数传递,会改变对应的值。    代码示例:    public class TestStringBuffered {        public static void main(String[] args) {            StringBuffer s1 = new StringBuffer();            s1.append("Hello");            StringBuffer s2 = new StringBuffer();            s2.append("World");            System.out.println(s1 + "---" + s2);//Hello---World            change(s1, s2);            System.out.println(s1 + "---" + s2);//Hello---WorldWorld            System.out.println("-------------");            String str1 = "Hello";            String str2 = "World";            System.out.println(str1 + "------" + str2);//Hello------World            change(str1, str2);            System.out.println(str1 + "------" + str2);//Hello------World        }        private static void change(String str1, String str2) {            str1 = str2;            str2 = str1 + str2;        }        private static void change(StringBuffer s1, StringBuffer s2) {            s1 = s2;            s2.append(s1);        }    }

3:Integer
3.1 -128到127之间的数据缓冲池问题

public class TestInteger {    public static void main(String[] args) {        Integer i1 = new Integer(127);        Integer i2 = new Integer(127);        System.out.println(i1==i2);//false        System.out.println(i1.equals(i2));//true        Integer i3 = new Integer(128);        Integer i4 = new Integer(128);        System.out.println(i3==i4);//false        System.out.println(i3.equals(i4)); //true        Integer i5 =  127 ;        Integer i6 =  127 ;        System.out.println(i5==i6); //false        System.out.println(i5.equals(i6));//true        Integer i7 =  128 ;        Integer i8 =  128 ;        System.out.println(i7==i8);//true        System.out.println(i7.equals(i8));//true    }}

Integer自动装箱的源码:

    static final int low = -128;    static final int high = 127;     public static Integer valueOf(int i) {        if (i >= IntegerCache.low && i <= IntegerCache.high)            return IntegerCache.cache[i + (-IntegerCache.low)];        return new Integer(i);    }

4:Character
4.1 方法:

    1:判断给定的字符是否是大写  boolean isUpperCase(char ch);    2:判断给定的字符是否是小写  boolean isLowerCase(char ch);    3:判断给定的字符是否是数字字符 boolean isDigit(char ch);    4:把给定的字符转成大写   char toUpperCase(char ch);    5:把给定的字符转成小写  char toLowerCase(char ch);

5 Object类
5.1 Object是类层次结构的根类,所有的类都直接或者间接的继承自Object类。
5.2 Object类的构造方法有一个,并且是无参构造
子类构造方法默认访问父类的构造是无参构造
5.3 方法:

       1:toString()        返回对象的字符串表示,默认是由类的全路径+'@'+哈希值的十六进制表示。        即: getClass().getName() + '@' + Integer.toHexString(hashCode())        一般子类都会重写该方法。       2:equals()        比较两个对象是否相同。默认情况下,比较的是地址值是否相同。        3:hashCode() 返回对象的哈希值         4:getClass() 返回对象的字节码文件对象         5:finalize() 用于垃圾回收,在不确定的时间        6:clone() 可以实现对象的克隆,包括成员变量的数据复制,但是它和两个引用指向同一个对象是有区别的。

5.4 思考

        ==和equals()的区别?        1:==            基本类型:比较的是值是否相同            引用类型:比较的是地址值是否相同        2:equals()            只能比较引用类型。默认情况下,比较的是地址值是否相同。