当前位置: 首页 > news >正文

Java 包装类和Arrays类(详细解释)

目录

包装类

作用介绍

包装类的特有功能

Arrays类

Arrays.fill() 

Arrays.toString() 

Arrays.sort()

升序排序

降序排序

Arrays.equals()

Arrays.copyOf()

Arrays.binarySearch()

包装类

作用介绍

包装类其实就是8种基本数据类型对应的引用类型。

基本数据类型引用数据类型
byteByte
shortShort
intInteger
longLong
charCharacter
floatFloat
doubleDouble
booleanBoolean

为什么需要包装类?

Java为了实现一切皆对象,为8种基本类型提供了对应的引用类型。

后面的集合和泛型其实也只能支持包装类型,不支持基本数据类型。

自动装箱

基本类型的数据和变量可以直接赋值给包装类型的变量。

public static void main(String[] args) {int num1 = 10;// 自动装箱(将int基本数据类变量赋值给包装类型变量)Integer a = num1;System.out.println(a);
}

自动拆箱

包装类型的变量可以直接赋值给基本数据类型的变量。

public static void main(String[] args) {Integer num2 = 100;// 自动拆箱(将包装类型变量赋值给基本类型变量)int b = num2;System.out.println(b);
}

包装类的特有功能

包装类的变量的默认值可以是null,容错率更高, 而基本类型不可以。

public static void main(String[] args) {Integer num3 = null;
}

可以把基本类型的数据转换成字符串类型(用处不大)

  • 调用toString()方法得到字符串结果。
  • 或者调用Integer.toString(基本类型的数据)。
public static void main(String[] args) {Integer number = 100;// 方式一String result1 = number.toString();// 方式二String result2 = Integer.toString(101);// 方式三: 最简单常用String result3 = number + "";System.out.println(result1 + 1); // 1001System.out.println(result2 + 1); // 1011System.out.println(result3 + 2); // 1002
}

可以把字符串类型的数值转换成真实的数据类型(非常有用)

  • teger.parseInt(“字符串类型的整数”)
  • Double.parseDouble(“字符串类型的小数”)。
 String st1 = "123";String st2 = "12.123";int a = Integer.parseInt(st1);double b = Double.parseDouble(st2);System.out.println(a+1);//124System.out.println(b+1);//13.123

将字符串类型的数字转为真实的数据, 我们也可以调用包装类的valueOf方法

public static void main(String[] args) {String strNum1 = "123";String strNum2 = "12.123";// 字符串转整数int intNum = Integer.valueOf(strNum1);// 字符串转小数double doubleNum = Double.valueOf(strNum2);System.out.println(intNum + 1); // 124System.out.println(doubleNum + 1); // 13.123
}

Arrays类

Arrays.fill() 

给定特定值val,使整个数组中或者某下标范围内的元素值为val。

 int [] a = new int[10];int [] b = new int[8];Arrays.fill(a,3);Arrays.fill(b,3,7,6);for(int x : a)System.out.print(x+",");System.out.println();for(int x : b)System.out.print(x+",");

  

Arrays.toString() 

快速输出数组内容,但是输出带有 [ ]

int[] a = {1,2,3,4,5};
System.out.println(Arrays.toString(a));
// 输出格式:[1,2,3,4,5]

Arrays.sort()

升序排序

数组排序函数,默认升序

int[] a = new int[5]{5,4,3,2,1};
Arrays.sort(a); // 1 2 3 4 5
System.out.println(Arrays.toString(a));
// [1,2,3,4,5]

两种重载方式:

1.Arrays.sort (数组名)

2.Arrays.sort (数组名,起始坐标,排序长度)

对字符串排序时,和c+一样,是按照字典序排序

降序排序

要实现减序排序,可以对用 Collections.reverseOrder(),也可以包装类型数组

不包装

Arrays.sort(a, Collections.reverseOrder());

包装

 Integer[] a = {1,4,3,2,5,6,2,3,4};Arrays.sort(a,((o1, o2) -> o2 - o1));System.out.println(Arrays.toString(a));// [6, 5, 4, 4, 3, 3, 2, 2, 1]

Arrays.equals()

比较两数组内容是否相等

int[] a = {1,2,3};
int[] b = {1,2,3};
boolean isSame = Arrays.equals(a,b);
//true

注意:Arrays.equals()是比较数组内容,而a.equals(b) 这样的方法是比较地址值

特别注意:在Java中数组a==b比较的时两者的地址

以后使用java提供的引用数据内容(数组、字符串、各种集合....)时,一定要用equals()方法比较内容是否相等,而不是傻傻的用 ==了!因为官方已经把equals()给重写了。如果你要比较你自己写的类,例如学生按成绩排序,就要自己重写equals()方法

Arrays.copyOf()

两种方式:

1.B数组 = Arrays.copyOf(A数组,赋值长度)

 int [] a = new int[10];int [] b;Arrays.fill(a,10);b = Arrays.copyOf(a,11);//超过赋值长度赋值为0System.out.println(Arrays.toString(b));//[10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0]

2. B数组 = Arrays.copyOfRange(A数组 ,起始坐标,截取长度)

int [] a = new int[10];
int [] b;
Arrays.fill(a,10);
b = Arrays.copyOfRange(a,2,5);
System.out.println(Arrays.toString(b));
//[10, 10, 10]

Arrays.binarySearch()

在数组中查找指定值,若找到,则返回此值的下标,

若没找到,返回 -插入点-1(一定为负值);

int[] a = {1,5,6,7};
Arrays.binarySearch(a,2)  //没找到,插入点为1,则返回 -2
Arrays.binarySearch(a,4)  //没找到,插入点为1,则返回 -2
Arrays,binarySearch(a,8)  //没找到,插入点为4,则返回 -5
Arrays.binarySearch(a,5)  //找到了!返回下标 1
只要返回值 ≥ 0 ,就代表找到了。

推荐音乐:手写的从前

参考:Java基础Arrays类   Arrays常用方法(超详解)

http://www.lryc.cn/news/150388.html

相关文章:

  • elementUi中的el-table表格的内容根据后端返回的数据用不同的颜色展示
  • 在访问一个网页时弹出的浏览器窗口,如何用selenium 网页自动化解决?
  • python 基于http方式与基于redis方式传输摄像头图片数据的实现和对比
  • 快速使用Git完整开发
  • 鲁棒优化入门(7)—Matlab+Yalmip两阶段鲁棒优化通用编程指南(下)
  • Docker技术--Docker中的网络问题
  • ASP.NET Core 中的两种 Web API
  • 【线程池】如何判断线程池中的任务执行完毕(三)
  • Qt/C++编写视频监控系统81-Onvif报警抓图和录像并回放
  • 浅谈安防视频监控平台EasyCVR视频汇聚平台对于夏季可视化智能溺水安全告警平台的重要性
  • 基于单片机的串行通信发射机设计
  • MySQL数据库——多表查询(3)-自连接、联合查询、子查询
  • day53 动规.p14 子序列
  • 将docker打包成镜像并保存到本地
  • Harmony数据存储工具类
  • ROS 2官方文档(基于humble版本)学习笔记(一)
  • 【数据结构】十字链表的画法
  • 使用rabbitmq进行支付之后的消息通知
  • 【100天精通python】Day47:python网络编程_Web开发:web服务器,前端基础以及静态服务器
  • Web框架Beego
  • Kubernetes(K8s)基本环境部署
  • antd5:form组件底层封装库field-form-1.37.0启动
  • 深度学习经典检测方法的概述
  • viewpager2导致的mViews下标越界问题
  • 无涯教程-JavaScript - NORMSDIST函数
  • Mysql查询(SELECT)
  • 基于JAVAEE技术的ssm校园车辆管理系统源码和论文
  • opencv-人脸识别
  • 九、idSpanMap使用基数树代替原本的unordered_map 十、使用基数树前后性能对比
  • 政府科技项目验收全流程分享