day13--Java常用类
Java常用类
1.包装类
1.1什么是包装类?
Java 是面向对象的语言,但不是“纯面向对象”的,比如我们经常用到的基本数据类型就不是对象。
在我们实际应用中,经常需要将基本数据转换成对象,以便于操作。为了解决这个不足,Java在设计类时,为每个基本数据类型分别设计了一个对应的类进行代表,这样的八个与基本数据类型对应的类统称为包装类(Wrapper Class)。
8种基本数据类型,分别对应一个包装类。包装类均位于java.lang包:
| 基本数据类型 | 包装类 |
|---|---|
| byte | Byte |
| boolean | Boolean |
| short | Short |
| char | Characther |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
在这八个类中,除了Character和Boolean以外,其他的都是“数字型”,“数字型”都是java.lang.Number的子类。

1.2为什么要用包装类?(优点)
- 某些方法的参数必须是对象,为了能让基本数据类型的数据能作为参数,因此提供包装类
- 包装类还可以提供更多的功能
- 其他特别重要的功能:比如可以实现字符串和基本数据类型之间的转换
例子1:让基本数据类型的数据能作为参数
package li.normalclass.warpper;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class TsetWarpper1 {
public static void main(String[] args) {
// 1. 某些方法的参数必须是对象,为了能让基本数据类型的数据能作为参数,因此提供包装类
List list = new ArrayList();
list.add(new String("xxxx"));
list.add(new Date());
//自动装箱和拆箱从Java 1.5开始引入,目的是将原始类型值转自动地转换成对应的对象
list.add(80);//自动装箱,早期应该写成: list.add(new Integer(80));
list.add(3.14);//自动装箱,早期:list.add(new Double(3.14));
System.out.println(list);
}
}

自动装箱和拆箱从Java 1.5开始引入,目的是将原始类型值转自动地转换成对应的对象
例子2:包装类还可以提供更多的功能
package li.normalclass.warpper;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class TsetWarpper1 {
public static void main(String[] args) {
// 2. 包装类还可以提供更多的功能
System.out.println(Integer.MAX_VALUE);//2147483647
System.out.println(Integer.MIN_VALUE);//-2147483648
System.out.println(Integer.SIZE);//32bit
System.out.println(Integer.TYPE);//底层包装的基本数据类型
}
}

例子3:实现字符串和基本数据类型之间的转换
package li.normalclass.warpper;
public class TsetWarpper1 {
public static void main(String[] args) {
//3. 其他特别重要的功能:比如可以实现字符串和基本数据类型之间的转换
//比如用户在网页表单输入的所有内容,java接收完之后会全部识别为String字符串类型,这时候就要我们将字符串根据需要转变为不同的数据类型
//注意字符串不能强制转换成数值类型,不能用强制转换
int age = Integer.parseInt("18");
double pi = Double.parseDouble("3.14");
System.out.println(age);
System.out.println(pi);
}
}

1.3如何使用包装类
1.3.1自动装箱和自动拆箱
自动装箱和自动拆箱就是将基本数据类型和包装类之间进行自动的互相转换。
JDK1.5之后,Java引入了自动装箱(autoboxing)和自动拆箱(unboxing)
自动装箱:基本类型的数据处于需要对象的环境中时,会自动转换为“对象”。
自动拆箱:每当需要一个值时,对象会自动转成基本数据类型,没必要去显示调用intvalue()、doubleValue()等方法。
如 Integer i = 5; int j = i ; //这样的过程就是自动拆箱
我们可以用一句话总结自动拆箱和自动装箱:
自动装箱过程是通过调用包装类valueOf()方法实现的,而自动拆箱过程是通过调用包装类xxxValue()方法实现的
xxx代表对应的基本数据类型,如intValue()、doubleValue()等
例子1:自动拆箱和自动装箱
package li.normalclass.warpper;
public class TsetWapper2 {
public static void main(String[] args) {
//如何使用包装类
//1.自动拆箱和自动装箱
Integer integer = new Integer(80);//手动装箱
int i = integer.intValue();//手动拆箱
//从jdk1.5开始支持自动装箱和自动拆箱
Integer integer1 = 80;//自动装箱
int i1 = integer;//自动拆箱
System.out.println(integer1+"\t"+i1);
}
}

例子2:自动装箱和自动拆箱的底层封装
前置知识:
- equals与==的区别:
- ==是判断两个变量或实例是不是指向同一个内存地址,equals是判断两个变量或实例所指向的内存空间的值是不是相同
- ==是指对内存地址进行比较 ,equals()是对字符串的内容进行比较
- ==指引用是否相同, equals()指的是值是否相同

- Integer.valueOf();//自动装箱底层代码源码:
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}

Integer类提供了一个静态内部类IntegerCache,对于定义一个静态内部类cache,长度为256,赋值为-128-127。对于自动装箱是如果在此范围内的数据,则直接获取数组的指定值;对于这个范围外的数据,通过new Integer()重新创建对象。这么做目的是提高效率。
package li.normalclass.warpper;
public class TsetWapper2 {
public static void main(String[] args) {
//2.理解Integer的 ==号和equals的区别
Integer in1 = new Integer(280);//手动装箱
Integer in2 = new Integer(280);//手动装箱
System.out.println(in1==in2);//false,引用类型 ==比较的是地址
System.out.println(in1.equals(in2));//true,比较的是对象内存空间中的值中的值
Integer in3 = -127;
Integer in4 = -127;
System.out.println(in1==in2);//true!!! [-128~127]之间,基本数据类型,比较的是值的大小
System.out.println(in1.equals(in2));//true,比较的是内存空间中的值
/*原因:
Integer in3 = Integer.valueOf(-127);//自动装箱的真实代码
Integer in4 = Integer.valueOf(-127);
Integer类提供了一个静态内部类IntegerCache,对于定义一个静态内部类cache,长度为256,赋值为-128-127。对于自动装箱是如果在此范围内的数据,则直接获取数组的指定值;对于这个范围外的数据,通过new Integer()重新创建对象。这么做目的是提高效率。
System.out.println(in1==in2);
这里int1和in2指向的都是数组中-127指向的下标地址,因此比较结果为true
*/
Integer in5 = 1234;
Integer in6 = 1234;
System.out.println(in3 == in4);//false,比较的是内存地址
System.out.println(in3.equals(in4));//true,比较的是对象中的值
}
}
包装类在自动装箱是为了提高效率,对于-128~127之间的值会进行缓存处理。超过范围之后,对象之间不能再使用==进行数值的比较,而是使用equals方法

day13--Java常用类的更多相关文章
- Java基础 —— Java常用类
Java常用类: java.lang包: java.lang.Object类: hashcode()方法:返回一段整型的哈希码,代表地址. toString()方法:返回父类名+"@&quo ...
- Java常用类之要点总结
Java常用类之要点总结
- Java常用类:包装类,String,日期类,Math,File,枚举类
Java常用类:包装类,String,日期类,Math,File,枚举类
- Java常用类学习笔记总结
Java常用类 java.lang.String类的使用 1.概述 String:字符串,使用一对""引起来表示. 1.String声明为final的,不可被继承 2.String ...
- Java 常用类总结(SE基础)
本篇博客对java常用类相关知识进行了归纳总结,比较详细,适用于学习和复习. 1. 字符串相关的类 1.1 String String是一个final类,代表不可变的字符序列.不可被继承. Strin ...
- Java常用类的使用
Java常用类 1. Optional 在我们的开发中,NullPointerException可谓是随时随处可见,为了避免空指针异常,我们常常需要进行 一 些防御式的检查,所以在代码中常常可见if( ...
- Java常用类之String类、Stringbuffer和Random类练习
定义一个StringBuffer类对象, 1)使用append方法向对象中添加26个字母,并倒序遍历输入 2)删除前五个字符 package 第十一章常用类; /** * 定义一个StringBuff ...
- java常用类-上
一,常用类之一包装类 java开发中习惯把八大基本数据类型封装到一个类中,并提供属性和方法,更方便的操作基本数据类型. 包装类的出现并不是用于取代基本数据类型,也取代不了. 包装类位于java.lan ...
- 第十四章 Java常用类
14.常用类 14.1 字符串相关的类 1课时 14.2 JDK 8之前时间日期API 1课时 14.3 JDK8中新时间日期API 1课时 14.4 JDK8中的Optional类 1课时 14.5 ...
- Java 常用类String类、StringBuffer类
常用类 String类.StringBuffer类 String代表不可变的字符序列 "xxxxxxx"为该类的对象 举例(1) public class Test { publi ...
随机推荐
- 零基础学Java第五节(面向对象一)
本篇文章是<零基础学Java>专栏的第五篇文章,文章采用通俗易懂的文字.图示及代码实战,从零基础开始带大家走上高薪之路! 本文章首发于公众号[编程攻略] 类与对象 在哲学体系中,可以分为主 ...
- python之生成器与模块
目录 生成器对象 自定义range方法 生成器表达式 模块 简介 模块的导入方式 第一种:import ... 第二种:from ... import ... 补充 生成器对象 生成器对象其实本质还是 ...
- MongoDB 各项命名规范
每日一句 Progress is the result of a bunch of failures. 进步是不断失败的成果. 概述 MongoDB涉及到的一些比如集合啥的命令规范. 集合的命名规范 ...
- C#与SQL Server连接时,如何编写连接字符串?
一.Windows身份验证时: String conStr = "Data Source=数据库服务器地址;Initial Catalog=数据库名称;Integrated Security ...
- Centos免密登陆
证书登录: 这里说的证书其实就是密钥. 在非对称加密中, 密钥分为公钥和私钥. 私钥, 即密钥所有人持有. 公钥则公布给他人. 公钥和私钥成对使用, 互相解密. 公钥加密数据只能用私钥解密; 私钥加密 ...
- Acwing787.归并排序
Acwing787.归并排序 归并模板 归并排序,合二为一 题目链接:Acwing787.归并排序 #include<iostream> using namespace std; cons ...
- 【Spring】事务的执行原理(三)
事务的回滚 如果获取事务属性不为空,并且抛出的异常是RuntimeException或者Error类型,调用事务管理器中的rollback方法进行回滚 如果事务属性为空或者抛出的异常不是Runtime ...
- QT5 QSS QML界面美化视频课程系列 QT原理 项目实战 C++1X STL
QT5 QSS QML界面美化视频课程系列 QT原理 项目实战 C++1X STL 课程1 C语言程序设计高级实用速成课程 基础+进阶+自学 课程2 C语言程序设计Windows GDI图形绘 ...
- Tomcat部署界面使用burp爆破
打开界面显示私密连接,正常抓包. 抓包查看Authorization的数据 Basic 后面的数据是经过base64加密后的.格式为admin:123456 勾选对应参数,payload设置为Cust ...
- python 基础知识-day10(面向对象)
1.面向对象的概念 拥有共同属性的一类进行归类的过程叫做面向对象. 2.注意事项 class定义类的时候,类名的首字母必须大写 3.面向对象案例 1 class Person(object): 2 d ...