JavaSE(六)包装类、基本类型和字符串之间的转换、==和equals的区别
一、包装类
Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的,这在实际使用时存在很多的不便,为了解决这个不足,
在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类(Wrapper Class),有些地方也翻译为外覆类或数据类型类。
1.1、包装类均位于Java.lang包,包装类和基本数据类型的对应关系如下表所示:
Primitive-Type Wrapper-Class byte Byte short Short int Integer long Long float Float double Double boolean Boolean char Character
注意:在这八个类名中,除了Integer和Character类以后,其它六个类的类名和基本数据类型一致,只是类名的第一个字母大写即可
1.2、包装类的位置
包装类型都是java.lang下的类,所以在使用的时候不需要导入包。
1.3、每种包装类中都定义属性和方法供其对象使用
这是从基本类型变为包装类型最明显的区别,现在指向的是对象了,可以访问对象中的属性和调用对象中的方法了,之前只是一个简单的数值,没有任何属性和方法。 例如: //使用变量i不能访问任何属性和访问 //因为变量i没有指向对象,也不能指向对象 int i = 1; //查看API可知Integer类中的构造器如果使用 //使用变量i可以访问Integer类中定义的属性和方法 //因为变量i指向的是对象,这是一个引用类型的变量 Integer i = new Integer(1); 或者 Integer i = new Integer("1"); 注:包装类中的属性和方法大都是静态的,可以使用类名直接访问。(也有非静态的方法,就需要使用对象调用了) 例如: main:
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
System.out.println(Integer.toBinaryString(100));
1.4、常用的方法
简单的使用:
1.5、包装类的作用
1)作为和基本数据类型对应的类类型存在,方便涉及到对象的操作。
2)包含每种基本数据类型的相关属性如最大值、最小值等,以及相关的操作方法。
1.6、JDK1.5增加了自动拆箱装箱的功能(低版本JDK中编译报错)
注:针对八种基本类型及其包装类型,这里以int和Integer为例 //自动装箱,把字面值1包装成Integer类型对象 Integer i1 = 1; //自动拆箱,把Integer对象转变为一个简单的int类型值 int i2 = new Integer(1); 注: //编译通过 Integer a = 1; //编译报错 //1可以自动装箱为Integer类型对象 //但是Integer和Long没有任何关系 Long b = 1; //因为int是32位 long是64位 int --可以自动转换为--> long //因为Integer和Long没有子父类关系 Integer --不能转换为--> Long
二、基本类型和字符串之间的转换
在程序开发中,我们经常需要在基本数据类型和字符串之间进行转换。
2.1、基本类型转换为字符串有三种方法:
1) 使用包装类的 toString() 方法
2) 使用String类的 valueOf() 方法
3.)用一个空字符串加上基本类型,得到的就是基本类型数据对应的字符串
2.2、将字符串转换成基本类型有两种方法:
1) 调用包装类的 parseXxx 静态方法
2.)调用包装类的 valueOf() 方法转换为基本类型的包装类,会自动拆箱
三、==和equals方法的区别
这俩个都是对俩个变量做比较的。 1)基本类型变量的比较 基本类型变量指向的不是对象,不能调用方法,所以只能使用==进行比较,并且比较的是基本类型变量的简单数值是否相等。 2)引用类型变量的比较 引用类型变量指向的是对象,所以既可以使用==进行比较,也可以使用equals进行比较 区别在于: equals是Object中的方法,每个对象都可以调用和其他对象比较是否相等,默认比较的是俩个引用所指向的对象内存地址值(和==号的作用一样),但是也可以在类中对equals方法进行重写,按照自己的逻辑来比较俩个对象。 ==是java中的基本的操作符,是不能重写的,俩个引用使用==进行比较,那么比较的是引用所指向的内存地址值是否相同。
四、toString方法hashCode方法
toString和hashCode都是Object类中的方法,所以每个对象都可以直接调用。 hashCode方法,返回该对象的哈希码值,Object中的实现一般是通过将该对象的内存地址转换成一个整数。 toString方法,返回该对象的字符串表示。 其形式为: 类的全限定名@hashCode方法返回值的十六进制形式 即: o.getClass().getName() + "@" + Integer.toHexString(o.hashCode()) 例如:
public class Student{
}
main:
Student s = new Student();
String str1 = s.toString();
String str2 = s.getClass().getName()+"@"+Integer.toHexString(s.hashCode());
System.out.println(str1);
System.out.println(str2);
输出结果: com.briup.ch06.Student@6084fa6a com.briup.ch06.Student@6084fa6a 注:我们可以把最后的那个六十进制数字认为是这个对象的内存地址,但是其实并不是真的地址值,而是这个对象的哈希码值,这个哈希码值默认又是通过对象地址值转换过来的一个数字。(如果我们重写了hashCode方法,那这个返回的哈希码值就真的和对象内存地址没有一点关系了) 例如:
Student s = new Student();
//打印引用时,默认调用其所指向对象的toString方法
System.out.println(s);
System.out.println(s.toString());
注:有些时候还是会有一点区别
Student s = null;
//打印null
System.out.println(s);
//运行报错,空指针异常
System.out.println(s.toString());
- 跨浏览器tab页的通信解决方案尝试
- 深度学习的GPU:深度学习中使用GPU的经验和建议
- socket.io搭配pm2(cluster)集群解决方案
- 用 Python 来刷微信「跳一跳」游戏的记录
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(十二)数据层优化-explain关键字及慢sql优化
- 高吞吐koa日志中间件
- 关于SQLRecoverableException问题的排查和分析(r4笔记第13天)
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(十三)数据层优化-表规范、索引优化
- node中的Stream-Readable和Writeable解读
- Spring+SpringMVC+MyBatis+easyUI整合进阶篇(六)一定要RESTful吗?
- 深入node之Transform
- 巧用shell脚本统计磁盘使用情况(r4笔记第12天)
- 使用fasttext实现文本处理及文本预测
- 关于导入导出sequence(r4笔记第11天)
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 【Hadoop 分布式部署 十 一: NameNode HA 自动故障转移】
- Hive安装部署及简单测试 网页《一》
- Hive初步使用、安装MySQL 、Hive配置MetaStore、配置Hive日志《二》
- Python - lambda函数
- Oracle 基础学习笔记
- 算法【最大子序列问题】
- 【算法、递归回溯解决数独】
- Anaconda使用命令
- 最大连续子数组
- markdown编辑器实现代码高亮
- LeetCode - 198 简单动态规划 打家劫舍
- Jaskson精讲第7篇-JsonTypeInfo注解在类继承关系下的使用
- 《剑指Offer 1.二维数组中的查找》2019-03-25
- Elasticsearch:Dynamic mapping
- 设计模式《单例设计模式》