Math/System/Runtime/Object

1、Math

(1)常用方法

类型方法名说明
public static intabs (int a)返回整数的绝对值
public static doublepow (double a,double b)计算a的b次幂的值
public static int      max (int a,int b) 获取两个int值中的较大值
public static intmin (int a,int b) 获取两个int值中的较小值
public static double   ceil (double a) 返回大于或等于参数的最小整数
public static doublefloor (double a)    返回小于或等于参数的最大整数
public static int          round (float a) 按照四舍五入返回最接近参数的int类型的值
public static double   random ()      返回一个[0.0,1.0)的随机值

2、System

(1)常用方法

①时间原点:1970年1月1日00:00:00;

②1秒=1000毫秒。

类型方法名说明
public static voidexit (int status)终止当前运行的 Java 虚拟机,非零表示异常终止
public static longcurrentTimeMillis ()返回当前时间(以毫秒为单位)

(2)应用

计算程序运行时间,比较效率。

3、Runtime

现在忽略。

4、Object

(1)public String toString()

①说明

a. 以哪种字符串的形式返回对象,至于是哪种形式,就看方法中如何定义的了。

b. Object类中返回字符串的形式为类名@对象的内存地址。

c. 一般会重写从父类中继承的toString方法,返回属性值,因为内存地址没什么用。

②Object类中的toString方法的源码

public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

③System.out.println()方法的代码:

(2)public boolean equals(Object o)

Object类中的equals方法比较的是两个对象的地址值是否相同。

①equals方法的源码:

public boolean equals(Object obj) {
        return (this == obj);
}

③String类中重写了Object类中的equals方法,比较所存的字符串是否相同。 

大致原理如下:

1、首先比较引用地址

如果两个字符串对象引用地址相同(即指向同一个内存地址),则它们一定是相等的,直接返回true。

2、然后比较字符串内容

它会逐个比较每个字符是否相同,直到找到不相同的字符或者比较完所有字符。

3、对特殊情况的处理

①例如对null的处理,如果调用equals()方法的对象为null,则直接返回false;如果两个对象中有一个为null,也直接返回false。

②如果传入的对象不是String类型,返回false。

下面是简化代码:

public boolean equals(Object anObject) {
    // 如果是同一个引用,直接返回true
    if (this == anObject) {
        return true;
    }
    
    // 如果传入的对象不是String类型,返回false
    if (!(anObject instanceof String)) {
        return false;
    }
    
    // 强制类型转换为String类型
    String anotherString = (String)anObject;
    int length = value.length;
    
    // 比较字符串长度是否一致
    if (length != anotherString.value.length) {
        return false;
    }
    
    // 逐个字符比较
    char v1[] = value;
    char v2[] = anotherString.value;
    int i = 0;
    while (length-- != 0) {
        if (v1[i] != v2[i])
            return false;
        i++;
    }
    return true;
}

(3)protected Object clone()

①说明

把A对象的属性值完全拷贝给B对象,也叫对象拷贝,对象复制。

对象克隆的分类:

深克隆和浅克隆

浅克隆:

不管对象内部的属性是基本数据类型还是引用数据类型,都完全拷贝过来;

基本数据类型拷贝过来的是具体的数据,引用数据类型拷贝过来的是地址值。

Object类默认的是浅克隆。

深克隆:

基本数据类型拷贝过来,字符串复用,引用数据类型会重新创建新的。

也有第三方的克隆类去使用;一个简单的例子:

//首先有一个被克隆的对象
        int[] data = {1, 2, 3, 4, 5, 6};
        User u1 = new User(1, "zhangsan", "1234qwer", "1", data);
        //调用第三方写的克隆方法
        Gson gson = new Gson();
        //将对象变成字符串的格式
        String s = gson.toJson(u1);
        System.out.println(s);
        //克隆
        User user = gson.fromJson(s, User.class);
        System.out.println(user);

    }

问题1:为什么需要重写子类中的clone方法才能访问?

首先Object类是java.lang包下的,子类User继承了其中的clone方法,但是与User同包下的测试类无法直接访问clone方法,重写User中的clone方法,与User同包下的测试类就可以访问到此方法了。

总结就是:重写是为了让这个方法存在于这个包,就可以同包下类能访问了。

5、Objects

①私有化构造方法,外界无法创建其对象;

②都是静态方法,可通过类名.方法名去访问。

综上,Objects是一个工具类。

6、BigInteger

可以用来表示很大很大的数,有多大都可以。

(1)如何获取一个BigInteger类型的对象?

一般有构造方法和静态方法。

①构造方法

//获取指定的大整数,参数传递的是字符串格式
//我觉得这种的应用就是int不能表示时,转为BigInteger
BigInteger num2 = new BigInteger("211111111111111111");

②静态方法 

//还有一个静态方法可以用来获取大整数,但是要在long类型的取值范围内
//System.out.println(Long.MAX_VALUE);
BigInteger num = BigInteger.valueOf(9223372036854775807L);

下面是valueOf方法的源码: 

还有一个特点:BigInteger对象一旦创建内部中的中的数便不可改变。没什么感觉。看到一个评论这样说的:如果是以前2个值中是一定会有一个值去存储3的,所以2个值没有一个改变成3,而是创建一个新的对象去存储3。

(2)常用方法

知道如何用就可以了。

7、BigDemical

浮点数由于存储方式的原因,有的小数部分在计算机中是无法准确存储,可能会存在精度丢失问题。

而BigDecimal能进行小数的精确运算。

(1)如何获取一个BigDecimal类型的对象?

一般有构造方法和静态方法。

①构造方法

//1、传入double类型的数据
//但这种也有可能是不精确的,所以要避免使用这种方式
BigDecimal bd1 = new BigDecimal(0.1);
//2、传入字符串类型,不会有这种问题
BigDecimal bd2 = new BigDecimal("0.1");

 

BigDecimal底层存储原理:数组中存的是每一个字符在ASCII码表中对应的数字。 

  • 16
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值