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. 某些方法的参数必须是对象,为了能让基本数据类型的数据能作为参数,因此提供包装类
  2. 包装类还可以提供更多的功能
  3. 其他特别重要的功能:比如可以实现字符串和基本数据类型之间的转换

例子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:自动装箱和自动拆箱的底层封装

前置知识:

    1. equals与==的区别:
  1. ==是判断两个变量或实例是不是指向同一个内存地址,equals是判断两个变量或实例所指向的内存空间的值是不是相同
  2. ==是指对内存地址进行比较 ,equals()是对字符串的内容进行比较
  3. ==指引用是否相同, equals()指的是值是否相同

    1. 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常用类的更多相关文章

  1. Java基础 —— Java常用类

    Java常用类: java.lang包: java.lang.Object类: hashcode()方法:返回一段整型的哈希码,代表地址. toString()方法:返回父类名+"@&quo ...

  2. Java常用类之要点总结

    Java常用类之要点总结

  3. Java常用类:包装类,String,日期类,Math,File,枚举类

    Java常用类:包装类,String,日期类,Math,File,枚举类

  4. Java常用类学习笔记总结

    Java常用类 java.lang.String类的使用 1.概述 String:字符串,使用一对""引起来表示. 1.String声明为final的,不可被继承 2.String ...

  5. Java 常用类总结(SE基础)

    本篇博客对java常用类相关知识进行了归纳总结,比较详细,适用于学习和复习. 1. 字符串相关的类 1.1 String String是一个final类,代表不可变的字符序列.不可被继承. Strin ...

  6. Java常用类的使用

    Java常用类 1. Optional 在我们的开发中,NullPointerException可谓是随时随处可见,为了避免空指针异常,我们常常需要进行 一 些防御式的检查,所以在代码中常常可见if( ...

  7. Java常用类之String类、Stringbuffer和Random类练习

    定义一个StringBuffer类对象, 1)使用append方法向对象中添加26个字母,并倒序遍历输入 2)删除前五个字符 package 第十一章常用类; /** * 定义一个StringBuff ...

  8. java常用类-上

    一,常用类之一包装类 java开发中习惯把八大基本数据类型封装到一个类中,并提供属性和方法,更方便的操作基本数据类型. 包装类的出现并不是用于取代基本数据类型,也取代不了. 包装类位于java.lan ...

  9. 第十四章 Java常用类

    14.常用类 14.1 字符串相关的类 1课时 14.2 JDK 8之前时间日期API 1课时 14.3 JDK8中新时间日期API 1课时 14.4 JDK8中的Optional类 1课时 14.5 ...

  10. Java 常用类String类、StringBuffer类

    常用类 String类.StringBuffer类 String代表不可变的字符序列 "xxxxxxx"为该类的对象 举例(1) public class Test { publi ...

随机推荐

  1. 无线:WPA

    WPA全名为Wi-Fi Protected Access,有WPA和WPA2两个标准,是一种保护无线电脑网络(Wi-Fi)安全的系统,它是应研究者在前一代的系统有线等效加密(WEP)中找到的几个严重的 ...

  2. 好客租房39-react组件基础总结

    1组件的两种创建方式:函数组件和类组件 2无状态函数组件 负责静态结构展示 3有状态组件 负责更新ui 让页面动起来 4绑定事件注意this指向问题 5使用受控组件创建表单 6完全利用js语言的能够力 ...

  3. forms组件补充与ModelForm简单使用与cookie与session

    目录 forms组件钩子函数 forms组件字段参数 字段参数 validators详解 choices详解 widget详解 forms组件字段类型 ModelForm简单使用 cookie与ses ...

  4. 安装Iftop到CentOS(YUM)

    iftop是Linux系统下实时流量监控工具. 运行环境 系统版本:CentOS Linux release 7.6.1810 (Core) 软件版本:Python 硬件要求:无 安装过程 1.安装i ...

  5. Java_循环结构

    目录 while循环 do...while循环 for循环 for循环嵌套 增强for循环 打印三角形 Debug 视频 while循环 while(布尔表达式){ //循环内容 } //死循环 wh ...

  6. 前端2CSS2

    内容概要 伪元素选择器 选择器优先级 字体样式 文字属性 背景属性 display属性 边框属性 盒子模型 浮动(重要) 解决浮动造成的影响 内容详情 伪元素选择器 """ ...

  7. JavaScript数据类型BigInt实践之id数值太大,导致前后端交互异常

    项目开发中前后端数据交互常会使用id作为主键索引,通常id数值都不大,使用number类型就可以表示处理,但对于一些分布式id或其他情况,id数值太大且超过了JS的最大处理数(Math.pow(2,  ...

  8. 第6章 字符串(下)——C++字符串

    6.5 C++ strings(C++字符串) C风格字符串常见错误:试图去访问数组范围以外的元素:没有使用函数strcpy( )来实现字符串之间的复制:没有使用函数strcmp( )来比较两个字符串 ...

  9. 这篇SpringCloud GateWay 详解,你用的到

    点赞再看,养成习惯,微信搜索[牧小农]关注我获取更多资讯,风里雨里,小农等你,很高兴能够成为你的朋友. 项目源码地址:公众号回复 sentinel,即可免费获取源码 背景 在微服务架构中,通常一个系统 ...

  10. 使用SSH连接Windows Server 2019 Core

    更新记录 本文迁移自Panda666原博客,原发布时间:2021年7月7日. 一.说明 Windows Server 2019 Core,是纯命令行的Windows Server版本,没有办法使用GU ...