JAVA Class10

学习内容:

1.equals()方法:

默认的方法是用来比较对象是否是同一对象,可以重写方法来实现不同功能

public class Person {
    String name;
    int age;
    public Person(String name,int age) {
        this.name = name;
        this.age =age;
    }
    public boolean equals(Object obj) {//重写父类equals方法
        if (obj== null) {
            return false;
        }
        if(this==obj) {
            return true;
        }
        if(obj instanceof Person) {
            Person p = (Person)obj;
            return(this.age==p.age);
        }
        return false;
    }
}

public class Test {
    public static void main(String[] args) {
        Person p1 = new Person("李四",30);
        Person p2 = new Person("张三",30);
        boolean b = p1.equals(p2);
        if(b) {
            System.out.println("两人年龄相同");
        }else {
            System.out.println("两人年龄不同");
        }
}

2.toString()方法

toString()方法默认返回对象物理地址,同样也可以重写

public Test{
    public static void main(String[] args) {
        Person p1 = new Person("李四",30);
        Person p2 = new Person("张三",30);
        String s = p1.toString();
        System.out.println(s);
        System.out.println(p1);//默认调用toString
    }
}

public class Person {
    String name;
    int age;
    public Person(String name,int age) {
        this.name = name;
        this.age =age;
    }
    public String toString() {//重写toString
        return name+age;
    }
}

3.String

String不属于基本数据类型,其本质是一个char类型的数组

public class Test1 {

    public static void main(String[] args) {
        //String te = new String("张三");
        String te = "张三";
        System.out.println(te.hashCode());
        //String本质上是一个不可改变的字符数组
        te = "李四";//本质上是开辟了一个新的char数组来存放李四
        System.out.println(te.hashCode());
               //两个te的hashcode不同
    }

}    

String解码输出:

public class Test {
    public static void main(String[] args) {
        byte[] b = {97,98,99,100};//正数 ASCII码 负数根据默认的GBK码,两个字节代表一个汉字
        String s = new String(b);
        System.out.println(s.toString());//byte解码转为字符
        String s2 = new String(b,0,3);//要解码的数组,开始索引值,解码长度
        System.out.println(s2);
        char[] c = {'看','门','狗'};
        String s3 = new String(c);//执行字符拼接
        System.out.println(s3);
    }
}

String常用方法:

public class Test {
    public static void main(String[] args) {
        String s = "武则天";
        int l = s.length();
        System.out.println(l);
        String s2 = s.substring(0, 1);//截取指定索引值围内的字符串,左开右闭,注意,下标基1,(0,1)就是获取第一个字符
        System.out.println(s2);
        String s3 = s.substring(2);//截取索引值2开始的字符串
        System.out.println(s3);
        System.out.println(s.startsWith("武"));//判断以...开头
        System.out.println(s.endsWith("天"));//判断以...结尾
        String s4 = "abc";
        System.out.println(s4.toUpperCase());//转为大写
        System.out.println(s.contains("武"));//判断是否包含指定字符串
        System.out.println(s.indexOf("武"));//返回指定字符串在调用字符串出现的索引值,没有返回-1
        byte[] ba = s.getBytes();//转为字节数组
        char[] cs = s.toCharArray();//转为字符数组
        for(int i=0;i<ba.length;i++) {
            System.out.print(ba[i]+" ");
        }
        for(int j=0;j<cs.length;j++) {
            System.out.print(cs[j]+" ");
        }
        String t1 = "who";
        String t2 = "WHO";
        System.out.println(t1.equals(t2));//区分大写小写,返回false
        System.out.println(t1.equalsIgnoreCase(t2));//忽略大小写,返回true
    }
}

4.StringBuffer与StringBuilder

区别:StringBuffer线程安全(有同步),StringBuilder线程不安全(无同步),StringBuilder因为无同步,所以速度更快。

public class Test {
    public static void main(String[] args) {
        //可变长度字符串,有冗余长度
        StringBuffer sb = new StringBuffer();
        sb.append("i").append("am").append("god");
        sb.insert(4, "hello");//在第四个字符位置后插入字符串
        sb.delete(4,9 );//删除第5-9字符,左开右闭
        sb.replace(1, 2,"who");//替换
        //sb.reverse();//反转
        //String tr = sb.toString();//转为字符串
        sb.append(true);
        System.out.println(sb);
    }

}

 5.char基本类型的特性及用法

char存储的字符其本质是ASCII码对应的数字,在用System.out.print输出时却是字符串,因为默认调用了toString方法

而输出两个char相加时则输出的数字,利用这一特性,我们可以实现字母大小写的判断或者输出大小写字母。

(1)大小写转换

class Test{
    String s = abcDEF;
    char[] c = s.toCharArray();
    for(int i=0;i<c.length;i++) {
            if(c[i]>='A'&&c[i]<='Z') {
                c[i]+=32;
            }else if(c[i]>='a'&&c[i]<='z') {
                c[i]-=32;
                        }
     System.out.print(c[i]+"");
}

(2)输出大写或小写字母表

public class Print {
    public void output(int x) {
        char A = 'A';
        char a = 'a';
        if(x==1) {
            for(int i=0;i<26;i++) {
                System.out.print(A+" ");
                A++;
            }
        }
        if(x==2) {
            for(int i=0;i<26;i++) {
                System.out.print(a+" ");
                a++;
            }
        }
    }
}
原文地址:https://www.cnblogs.com/whwjava/p/8692487.html