Java常见系统类--Java学习(10)

23 篇文章 0 订阅

Java常见系统类

Object类

Object概述

Object类是Java语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使用。在对象实例化的时候,最终找的父类就是Object。

Object类到底在哪里,怎么才能查看到呢?这里给大家介绍下关于JavaSE的开发文档API,当我们在下载JDK的时候,会看到有开发文档下载,这个文档需要到oracle网站下载。
在API文档中描述着相关类的详细信息,这里也需要大家掌握API的使用规则。
Object类中描述所有对象共有的方法:
在这里插入图片描述

常用方法介绍

  1. equals方法

equals方法,用于比较两个对象是否相同,它其实就是使用对象的内存地址在比较。Object类中的equals方法内部使用的就是==比较运算符。

在开发经常需要复写equals方法根据对象的特有数据进行比较。

/*
描述人这个类,并定义功能根据年龄判断是否是同龄人
由于要根据指定类的特有数据进行比较,这时只要覆盖Object中的equals方法
在方法体中根据类的特有数据进行比较
*/
class Person extends Object{
	int age ;
	//复写父类的equals方法,实现自己的比较方式
	public boolean equals(Object obj) {
		//判断当前调用equals方法的对象和传递进来的对象是否是同一个
		if(this == obj){
			return true;
		}
		//判断传递进来的对象是否是Person类型
		if(!(obj instanceof Person)){
			return false;
		}
		//将obj向下转型为Perosn引用,调用其特有数据
		Person p = (Person)obj;
		return this.age == p.age;
	}
}

注意:在复写Object中的equals方法时,一定要注意public boolean equals(Object obj)的参数是Object类型,在调用对象特有数据时,一定要进行类型转换,在转换之前必须进行类型判断。
2.toString方法

toString方法返回该对象的字符串表示,其实就是对象的类型+@+哈希值

由于toString方法返回的结果是内存地址,在开发中经常需要按照对象的特定数据得到相应的表现形式,因此也需要复写它。
例如

class Person extends Object{
	int age ;
	//根据Person类的特有数据复写toString方法
	public String toString() {
		return "Person [age=" + age + "]";
	}
}

基本数据类型包装类

基本类型包装类概述

基本类型包装类应用场景:通过文本框获取用户输入的数字数据,可是得到的都是字符串。 如果想要对字符串中的数字进行运算,必须要将字符串转成数字。

Java中提供了相应的解决的对象。 基本数据类型对象包装类:java将基本数据类型值封装成了对象。封装成对象有什么好处?因为可以提供更多的操作基本数值的功能。

8种基本类型:byte Byte short Short int Integer long
对应的包装类:Long float Float double Double boolean Boolean char Character
其中需要注意int对应的是Integer,char对应的Character,其他6个都是基本类型首字母大写即可。
基本数据类型对象包装类特点:用于在基本数据和字符串之间进行转换。

将字符串转成基本类型

parseXXX(String s);其中XXX表示基本类型,参数为可以转成基本类型的字符串,如果字符串无法转成基本类型,将会发生 NumberFormatException

System.*out*.println(Integer.*parseInt*("123") + 2);
System.*out*.println(Integer.*parseInt*("a1", 16));
// 可以将其他进制转成十进制。

将基本数值转成字符串有3种方式

1)基本类型直接与"“相连接即可;34+”"
2)调用String的valueOf方法;String.valueOf(34);
3)调用包装类中的toString方法;Integer.toString(34);

基本类型和对象转换

基本数值---->包装对象
Integer i = **new** Integer(4);//使用构造函数函数
Integer ii = **new** Integer("4");//构造函数中可以传递一个数字字符串
Integer iii = Integer.*valueOf*(4);//使用包装类中的valueOf方法
包装对象---->基本数值
int num = i.intValue();

自动装箱拆箱

JDK1.5以后,有了一个包装类的新特性。目的简化书写,自动装箱
Integer i = 4;//自动装箱。Integer i = Integer.valueOf(4);
i = i + 5;//原理;等号右边:将i对象转成基本数值 i.intValue() + 5;//自动拆箱。加法运算后,再次装箱。

String类

StringBuffer类

线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修
改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。
在这里插入图片描述

StringBuilder类

查阅API发现还有一个StringBuilder类,它也是字符串缓冲区。

public class Test {
	
	public static void main(String[] args) {
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i <= 100; i++) {
			sb.append(i);
 		}
		String str = sb.toString();
		System.out.println(str);
	}

	private static void test01() {
		String s = "";
		for (int i = 0; i <= 100; i++) {
			s += i; // 0 01 012 0123 01234 
 		}
		System.out.println(s);
	}
}

它和StringBuffer的区别是什么?
如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer要快。
StringBuilder是线程不安全的,即就是在对容器操作的时候,不用去判断同步锁的问题,那么效率就高。并且API告诉我们优先采用StringBuilder类。

BigInteger类与BigDecimal类

BigInteger类

如果我们使用的整数范围超过了 long 型怎么办?这个时候,就只能用软件来模拟一个大整数。java.math.BigInteger 就是用来表示任意大小的整数。 BigInteger 内部用一个 int[] 数组来模拟一个非常大的整数:

BigInteger bi = new BigInteger("1234567890");
System.out.println(bi.pow(5)); 
// 2867971860299718107233761438093672048294900000

对 BigInteger 做运算的时候,只能使用实例方法,例如,加法运算:

BigInteger i1 = new BigInteger("1234567890");
BigInteger i2 = new BigInteger("12345678901234567890");
BigInteger sum = i1.add(i2); // 12345678902469135780

和 long 型整数运算比, BigInteger 不会有范围限制,但缺点是速度比较慢。
也可以把 BigInteger 转换成 long 型:

BigInteger i = new BigInteger("123456789000");
System.out.println(i.longValue()); // 123456789000
System.out.println(i.multiply(i).longValueExact());
 // java.lang.ArithmeticException:BigInteger out of long range

使用 longValueExact() 方法时,如果超出了 long 型的范围,会抛出
ArithmeticException 。
在这里插入图片描述

BigDecimal类

和 BigInteger 类似, BigDecimal 可以表示一个任意大小且精度完全准确的浮点数。

BigDecimal bd = new BigDecimal("123.4567");
System.out.println(bd.multiply(bd)); // 15241.55677489

BigDecimal 用 scale() 表示小数位数,例如:

BigDecimal d1 = new BigDecimal("123.45");
BigDecimal d2 = new BigDecimal("123.4500");
BigDecimal d3 = new BigDecimal("1234500");
System.out.println(d1.scale()); // 2,两位小数
System.out.println(d2.scale()); // 4
System.out.println(d3.scale()); // 0

对 BigDecimal 做加、减、乘时,精度不会丢失,但是做除法时,存在无法除尽的情况,这时,就必须指定精度以及如何进行截断:

BigDecimal d1 = new BigDecimal("123.456");
BigDecimal d2 = new BigDecimal("23.456789");
BigDecimal d3 = d1.divide(d2, 10, RoundingMode.HALF_UP);
 // 保留10位小数并四舍五入
BigDecimal d4 = d1.divide(d2); 
// 报错:ArithmeticException,因为除不尽

比较BigDecimal
在比较两个 BigDecimal 的值是否相等时,要特别注意,使用 equals() 方法不但要求两个BigDecimal 的值相等,还要求它们的 scale() 相等。
必须使用 compareTo() 方法来比较,它根据两个值的大小分别返回负数、正数和 0 ,分别表示小于、大于和等于。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值