ApiDay002_02 Object中的包装类
1.Object:对象/东西
是所有类的鼻祖,所有类都直接或间接继承了Object, 万物皆对象,为了多态
Objec中有几个经常被派生类重写的方法:toString()和equals();
调用toString()时,默认返回:类的全称@地址,没有参考意义,所以常常重写toString(返回具体数据
调用equals()时,默认比较的还是==(即比较地址),没有参考意义,所以常常重写equals()来比较具体的属化
注意:
//说明:java的类都重写了equals()了
//--像String、StringBuilder已经重写比较内容
//--我们自己重写的类必须自己重写equals()
2.派生类重写equals()的基本规则:
两个对象必须是同一个类型,若类型不同则返口false
若参数对象为null,则返回false
原则上两个对象要比较对象的属性是否是相同
3.包装类:
- java定义了8个包装类,目的就是为了解决基本类型不能直接参与面向对象开发的问题,使得基本类型可以通过包装类的实例以对象的方式--其实给8种基本类型套了个壳
- 其中数字类型的包装类都是继承自java.lang.Number,而char和boolean的包装类直接继承自Object
- (特殊:1. int的包装类:Integer;char的包装类:Character;)、(Byte、Short、Float、Double)
包装类
java定义了8个包装类,目的是为了解决基本类型不能直接参与面向对象开发的问题,使得基本类型可以通过包装类的实例以对象的形式存在.
- 其中数字类型的包装类都继承自java.lang.Number,而char和boolean的包装类直接继承自Object
- Number是一个抽象类,定义了一些方法,目的是让包装类可以将其表示的基本类型转换为其他数字类型.
package integer;
public class IntegerDemo1 {
public static void main(String[] args) {
//基本类型转换为包装类
int i = 123;
//java推荐我们使用包装类的静态方法valueOf将基本类型转换为包装类,而不是直接new
Integer i1 = Integer.valueOf(i);//Integer会重用-128-127之间的整数对象
Integer i2 = Integer.valueOf(i);
System.out.println(i1==i2);//true
System.out.println(i1.equals(i2));//true
double dou = 123.123;
Double dou1 = Double.valueOf(dou);//Double则是直接new
Double dou2 = Double.valueOf(dou);
System.out.println(dou1==dou2);//false
System.out.println(dou1.equals(dou2));//true
//包装类转换为基本类型
int in = i1.intValue();//获取包装类对象中表示的基本类型值
double doub = i1.doubleValue();
System.out.println(in);//123
System.out.println(doub);//123.0
in = dou1.intValue();//大类型转小类型可能存在丢精度!
doub = dou1.doubleValue();
System.out.println(in);//123
System.out.println(doub);//123.123
}
}
包装类常用功能
package integer;
public class IntegerDemo2 {
public static void main(String[] args) {
//1可以通过包装类获取其表示的基本类型的取值范围
//获取int的最大值和最小值?
int imax = Integer.MAX_VALUE;
System.out.println(imax);
int imin = Integer.MIN_VALUE;
System.out.println(imin);
long lmax = Long.MAX_VALUE;
System.out.println(lmax);
long lmin = Long.MIN_VALUE;
System.out.println(lmin);
/*
2字符串转换为基本类型的前提是该字符串正确描述了基本类型可以保存的值,否则
会抛出异常:NumberFormatException
*/
String str = "123";
// String str = "123.123";//这个字符串不能解析为int值!
int d = Integer.parseInt(str);
System.out.println(d);//123
double dou = Double.parseDouble(str);
System.out.println(dou);//123.123
}
}
自动拆装箱特性
JDK5之后推出了一个新的特性:自动拆装箱
该特性是编译器认可的.当编译器编译源代码时发现有基本类型和引用类型相互赋值使用时会自动补充代码来完成他们的转换工作,这个过程称为自动拆装箱.
package integer;
public class IntegerDemo3 {
public static void main(String[] args) {
/*
触发自动拆箱特性,编译器会补充代码将包装类转换为基本类型,下面的代码会变为:
int i = new Integer(123).intValue();
*/
int i = new Integer(123);
/*
触发编译器自动装箱特性,代码会被编译器改为:
Integer in = Integer.valueOf(123);
*/
Integer in = 123;
}
}
ApiDay002_02 Object中的包装类的更多相关文章
- APEX:对object中数据进行简单处理?
在Salesforce中,常常要对各种数据进行处理,已满足业务逻辑.本篇文章会介绍如何实现从object获取数据,然后将取得的数据进行一系列简单处理. 第一步:SongName__c 是一个新建的ob ...
- 使用第三方工具覆写Object中方法
我们在实际开发中,经常需要覆写Object中的equals,hashcode,toString方法,其实编写这些代码并不是很难,但很枯燥和乏味. 下面推荐Google的Guava jar包来覆写上面的 ...
- java锁与监视器概念 为什么wait、notify、notifyAll定义在Object中 多线程中篇(九)
在Java中,与线程通信相关的几个方法,是定义在Object中的,大家都知道Object是Java中所有类的超类 在Java中,所有的类都是Object,借助于一个统一的形式Object,显然在有些处 ...
- Object 中 equals()使用
详细看: https://www.cnblogs.com/naihuangbao/p/9445027.html 1. ==是判断两个变量或实例是不是指向同一个内存空间equals是判断两个变量或实例所 ...
- 为什么notify(), wait()等函数定义在Object中,而不是Thread中
Object中的wait(), notify()等函数,和synchronized一样,会对“对象的同步锁”进行操作. wait()会使“当前线程”等待,因为线程进入等待状态,所以线程应该释放它锁持有 ...
- JS如何遍历Object中的所有属性?
JS如何遍历Object中的所有属性? var params = ""; for(var i in baseParams){ params += "&" ...
- Java 中的包装类
Java 中的包装类 相信各位小伙伴们对基本数据类型都非常熟悉,例如 int.float.double.boolean.char 等.基本数据类型是不具备对象的特性的,比如基本类型不能调用方法.功能简 ...
- Object中的方法以及对象相等的判定
看图说话 Object有以下几个方法 getClass() final类型,主要是用来获得运行时的类型 hashCode() 返回该对象的哈希码值,方法是为了提高哈希表(例如 java.util.Ha ...
- Java学习--Java 中的包装类
Java 中的包装类 相信各位小伙伴们对基本数据类型都非常熟悉,例如 int.float.double.boolean.char 等.基本数据类型是不具备对象的特性的,比如基本类型不能调用方法.功能简 ...
随机推荐
- 分享我做Dotnet9博客网站时积累的一些资料
从2019年使用WordPress搭建Dotnet9网站,到现在手撸代码开发,介绍中间使用的一些资源,绝无保留,希望对大家有用. 1. 申请域名.搭建WordPress网站 时间点:2019年11月 ...
- 1.17 想学好Linux,这些习惯必须养成(初学者必读)
不管是在生活还是工作中,每个人都会逐渐养成一些小习惯.坏习惯一旦形成就很难改正,所在在系统学习 Linux之前,给大家一些建议,刻意去培养一些好的习惯,对自己是很有利的. 学习Linux,要习惯使用命 ...
- Linux下高效实用的grep命令
Linux系统中的grep命令是一种功能强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则 ...
- 【mq】从零开始实现 mq-06-消费者心跳检测 heartbeat
前景回顾 [mq]从零开始实现 mq-01-生产者.消费者启动 [mq]从零开始实现 mq-02-如何实现生产者调用消费者? [mq]从零开始实现 mq-03-引入 broker 中间人 [mq]从零 ...
- 初学者都能懂得 Git 说明
初学者都能懂得 Git 说明 本文写于 2020 年 8 月 10 日 网上有很多非常优秀的 Git 教程,但是他们都是面向有一定基础的开发者的. 可是对于没什么基础的初学者甚至是偶尔操作代码的设计师 ...
- CenterNet训练时黑白图片不能画框的问题
解决CenterNet在detect.py中不能画框的问题 在第centernet.py的第198行的中加上这一行 image = image.convert('RGB')
- Java_选择结构
if单选择结构 if(布拉尔表达式){ //如果布拉尔表达式为true将执行的语句 } if双选择结构 if(布拉尔表达式){ //如果布拉尔表达式的值为true }else{ //如果布拉尔表达式的 ...
- 管理订单状态,该上状态机吗?轻量级状态机COLA StateMachine保姆级入门教程
前言 在平常的后端项目开发中,状态机模式的使用其实没有大家想象中那么常见,笔者之前由于不在电商领域工作,很少在业务代码中用状态机来管理各种状态,一般都是手动get/set状态值.去年笔者进入了电商领域 ...
- .NET C#基础(5):结构体 - 高性能代码的基石
0. 文章目的 本文面向有一定.NET C#基础知识的学习者,介绍C#中结构体定义.使用以及特点. 1. 阅读基础 了解C#基本语法 了解.NET中的栈与托管堆 2. 值类型 2.1 .N ...
- Docker容器固定ip
Docker容器固定IP 必须停止docker服务才能创建网桥 查看docker服务状态 停止docker服务 启动docker服务 [root@docker Tools]# systemctl st ...