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. pymysql.err.OperationalError: (1054, "Unknown column 'aa' in 'field list'")(已解决)

    错误描述: 今天使用python连接mysql数据库进行数据添加时,出现报错"pymysql.err.OperationalError: (1054, "Unknown colum ...

  2. 基于Proxmox平台搭建3D云教室

    背景 本文介绍了在 Proxmox VE 虚拟化平台上使用NVIDIA A16 GPU,开启vGPU特性,利用DoraCloud 搭建3D云教室的方案. Proxmox virtualization ...

  3. CF1682E Unordered Swaps

    鸽着,我不知道为什么对? 题意: 思路: code: #include<bits/stdc++.h> using namespace std; const int N=5e5+5; int ...

  4. Go微服务框架go-kratos实战03:使用 gorm 实现增删改查操作

    一.简介 在上一篇文章 go-kratos实战02 中,详细介绍了用 kratos 编写项目代码的步骤.这篇就在上篇基础上,再结合 Go 数据库操作库 gorm 一步一步来实现一个简单的增删改查操作. ...

  5. 钉钉登录二维码嵌套在vue页面中

    转自 https://www.csdn.net/tags/OtDacg3sMjQ2NTgtYmxvZwO0O0OO0O0O.html 钉钉登录二维码嵌套在vue页面中 2021-09-04 14:42 ...

  6. 软件性能测试分析与调优实践之路-JMeter对RPC服务的性能压测分析与调优-手稿节选

    一.JMeter 如何通过自定义Sample来压测RPC服务 RPC(Remote Procedure Call)俗称远程过程调用,是常用的一种高效的服务调用方式,也是性能压测时经常遇到的一种服务调用 ...

  7. csv.reader(f)和f.readlines()、追加数据

    假如某个文档f中存储如下内容: 你好,中国. 1,2,3,4 共两行内容. 当你使用csv.reader(f),则会存储为如下形式: [['你','好','中','国'] ['1','2','3',' ...

  8. conda cheat sheet可直接百度这个名字

  9. ASP.NET Core 应用配置指定地址和端口

    更新记录 本文迁移自Panda666原博客,原发布时间:2021年5月10日. 几种方式 ASP.NET Core 应用配置指定地址和端口支持以下几种主要方式: 1.在命令行模式启动应用时设置 --u ...

  10. 浅析DispatchProxy动态代理AOP

    浅析DispatchProxy动态代理AOP(代码源码) 最近学习了一段时间Java,了解到Java实现动态代理AOP主要分为两种方式JDK.CGLIB,我之前使用NET实现AOP切面编程,会用Fil ...