达内课程-API(java.lang.Object和java.lang.String)

来源:互联网 发布:舒缦水暖床垫淘宝网 编辑:程序博客网 时间:2024/06/05 04:00

API

*Application Programming Interface
应用编程接口
*一切可以调用的东西

java.lang.Object(lang - language语言包lang中的类自动导入)
java.lang.String
java.lang.StringBuilder
java.lang.StringBuffer
正则表达式
java.util.regex.Pattern
java.util.regex.Matcher
基本类型包装类
java.math.BigDecimal
java.math.BigInteger
java.text.DecimalFormat
java.lang.Math
日期相关类型
java.util.Date
java.text.SimpleDateFormat
java.util.Calendar
java.util.GregorianCalendar

java.lang.Object

java中所有类的顶层父类
一个类如果不继承其他类,默认继承Object

class A /*extends Object*/{
}

方法

1、toString()   获得对象的字符串标识

Object中的实现是:
例如一个坐标点(3,4),如果直接把坐标点的对象toString()会得到如下:
com.xy.www.@a18wfe7
包名@内存地址

如果想得到(3,4)格式的,可以在子类中重写这个方法

2、equals(Object obj)   当前对象与参数对象obj比较是否相等
a.equals(b)

Object中实现是比较内存地址
如果分别有两个坐标点(3,4)和(3,4)这也是两个不相等的。因为内存地址不同
this == obj
(引用当前对象的内存地址) == (对象内存地址)

如果需要,可以在子类中重写这个方法,比较对象的属性是否相等

3、hashCode()
获得对象的哈希值
Object中默认实现是:
使用内存地址值作为哈希值
如果需要,可以在子类中重写这个方法
使用属性数据来计算产生哈希值

对象作为键,放入哈希表时,需要重写hashCode()

栗子:类中重写toString()和equals()

Point类

public class Point {    private int x;    private int y;    public int getX() {        return x;    }    public void setX(int x) {        this.x = x;    }    public int getY() {        return y;    }    public void setY(int y) {        this.y = y;    }    public Point(int x, int y) {        super();        this.x = x;        this.y = y;    }    public Point() {        super();    }    @Override    public boolean equals(Object obj) {        if(obj == null) return false;        if(obj == this) return true;        if(!(obj instanceof Point)) return false;        Point p = (Point)obj;        return                this.x == p.x && this.y == p.y;    }    @Override    public String toString() {        // TODO Auto-generated method stub        return "("+x+","+y+")";    }}

Test

public class Test {    public static void main(String[] args) {          Point a = new Point(3,4);        Point b = new Point(3,4);        System.out.println(a.toString());        System.out.println(b.toString());        System.out.println(a==b);        System.out.println(a.equals(b));    }  }

运行结果

(3,4)
(3,4)
false
true

java.lang.String

封装char[]数组

创建对象过程

1、第一种方法
char[] a = {‘h’,’e’,’l’,’l’,’0’}
String s = new String(a);

2、第二种方法
String s = “hello”;

字符串的字面值(第二种方法)
第一次使用一个字面值时,
会在“字符串常量池”中新建实例
再次使用相同字面值时,直接访问常量池中存在的对象,而不会新建对象

栗子:验证字符串的字面值

Test

public class Test {    public static void main(String[] args) {          char[] a = {'h','e','l','l','o'};        String s1 = new String(a);        String s2 = "hello";        String s3 = "hello";        System.out.println(s1);        System.out.println(s2);        System.out.println(s3);        System.out.println(s1==s2);        System.out.println(s2==s3);        System.out.println(s1.equals(s2));    }  }

运行结果

hello
hello
hello
false
true
true

不可变
字符串一旦创建出来,就不可变
String s1 = “abc”;
String s2 = “def”;
String s3 = “ghi”;

字符串连接效率低,每次连接都创建新实例

栗子:验证字符串连接效率

public class Test {    public static void main(String[] args) {          String a = "abcdefghijklmnopqrstuvwxyz";        String b = "";        long t = System.currentTimeMillis();        for(int i=0;i<1000;i++){            b += a;        }        t = System.currentTimeMillis() - t;        System.out.println(t);    }  }

执行结果

21

原创粉丝点击