JAVA篇10 —— 常用类WrapperStringMathArraysSystemBigIntegerBigDecimal日期

news2024/12/23 13:05:02

欢迎来到我的主页:【一只认真写代码的程序猿

本篇文章收录于专栏【小小爪哇

如果这篇文章对你有帮助,希望点赞收藏加关注啦~


目录

1 包装类

1.1 包装类和String

1.2 int&char包装类常用方法

2 String类

3 Math 类

4 Arrays类

5 System类

6 BigInteger和BigDecimal类

7 日期类


1 包装类

基本数据类型包装类
booleanBoolean
charCharacter
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble

包装类和基本数据类型的相互转换,这里以int 和 Integer演示(其他类似)。

  1. jdk5 前的手动装箱和拆箱方式,装箱: 基本类型->包装类型,反之,拆箱.
  2. jdk5 以后(含jdk5)的自动装箱和拆箱方式。
  3. 自动装箱底层调用的是valueOf方法,比如Integer.valueOf()
public class IntegerTest1 {
    public static void main(String[] args) {
        //jdk5 前是手动装箱和拆箱
        //手动装箱 int->Integer
        int n1 = 100;
        Integer integer = new Integer(n1);
        Integer integer1 = Integer.valueOf(n1);
        //手动拆箱
        //Integer -> int
        int i = integer.intValue();
        
        //jdk5 后, 就可以自动装箱和自动拆箱
        int n2 = 200;
        //自动装箱 int->Integer
        Integer integer2 = n2; //底层使用的是 Integer.valueOf(n2)
        //自动拆箱 Integer->int
        int n3 = integer2; //底层仍然使用的是 intValue()方法
        
        //现在可以直接赋
        int n22 = 200;
        Integer n22In = n22;
        //可以直接改成下述:
        Integer n222 = 200;
    }
}

1.1 包装类和String

public class WrapperVSString {
    public static void main(String[] args) {
        //Wrapper转String
        Integer i = 10;
        //方案一:加空串
        String str1 = i+"";
        //方案二:toString
        String str2 = i.toString();
        //方案三:ValueOf
        String str3 = String.valueOf(i);
        System.out.println(str1==str2);//false
        System.out.println(str1==str3);//false
        System.out.println(str2==str3);//false

        //String转Wrapper,parseInt和valueOf
        String strTest = "12345";
        Integer i2 = Integer.parseInt(strTest);
        Integer i3 = Integer.valueOf(strTest);
    }
}

1.2 int&char包装类常用方法

public class WrapperMethod {
    public static void main(String[] args) {
        System.out.println(Integer.MIN_VALUE); //返回最小值
        System.out.println(Integer.MAX_VALUE);//返回最大值
        System.out.println(Character.isDigit('a'));//判断是不是数字
        System.out.println(Character.isLetter('a'));//判断是不是字母
        System.out.println(Character.isUpperCase('a'));//判断是不是大写
        System.out.println(Character.isLowerCase('a'));//判断是不是小写
        System.out.println(Character.isWhitespace('a'));//判断是不是空格
        System.out.println(Character.toUpperCase('a'));//转成大写
        System.out.println(Character.toLowerCase('A'));//转成小写
    }
}

如果数字范围在-128到127内,则数字直接返回,否则为new Integer();下面为示例代码:

public class WrapperMethod {
    public static void main(String[] args) {
        //这里主要是看范围 -128 ~ 127 就是直接返回
        // i 在 IntegerCache.low(-128)~IntegerCache.high(127),就直接从数组返回
        int n = 1;
        int m = 1;
        System.out.println(n == m);//true
        Integer i1 = new Integer(1);
        Integer j1 = new Integer(1);
        System.out.println(i1 == j1); //False

        Integer i2 = 128;
        Integer j2 = 128;
        System.out.println(i2 == j2);//False
    }
}

ValueOf源码:

public static Integer valueOf(int i) {
    if (i >=IntegerCache.low && i <=IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
    return new Integer(i);
}

IntegerCache源码:

private static class IntegerCache {
    static final int low = -128;
    static final int high;
    static final Integer cache[];

    static {
        // high value may be configured by property
        int h = 127;
        String integerCacheHighPropValue =
                sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
        if (integerCacheHighPropValue != null) {
            try {
                int i = parseInt(integerCacheHighPropValue);
                i = Math.max(i, 127);
                // Maximum array size is Integer.MAX_VALUE
                h = Math.min(i, Integer.MAX_VALUE - (-low) -1);
            } catch( NumberFormatException nfe) {
                // If the property cannot be parsed into an int, ignore it.
            }
        }
        high = h;

        cache = new Integer[(high - low) + 1];
        int j = low;
        for(int k = 0; k < cache.length; k++)
            cache[k] = new Integer(j++);

        // range [-128, 127] must be interned (JLS7 5.1.7)
        assert Integer.IntegerCache.high >= 127;
    }

    private IntegerCache() {}
}

2 String类

String类 - 蜡笔小新. - CSDN

3 Math 类

1.abs 绝对值
2.pow 求幂
3.ceil 向上取整,返回>=该参数的最小整数(转成 double);
4.floor 向下取整, 返回<=该参数的最大整数(转成 double);
5.round 四舍五入 Math.floor(该参数+0.5)
6.sqrt 求开方
7.random 求随机数
8.max , min 返回最大值和最小值
package MathClas;

/**
 * @ClassName MathMethod
 * @Description
 * @Date 2024/12/1 19:05
 * @Version V1.0
 */
public class MathMethod {
    public static void main(String[] args) {
        int abs = Math.abs(-9);//9
        double pow = Math.pow(2, 4);//2 的 4 次方
        double ceil = Math.ceil(3.9);//4.0
        double floor = Math.floor(4.001);//4.0
        long round = Math.round(5.51);//6
        double sqrt = Math.sqrt(9.0);//3.0
        
        /* random 返回的是 0 <= x < 1 之间的一个随机小数
         思考: 请写出获取 a-b 之间的一个随机整数,a,b 均为整数 , 比如 a = 2, b=7
         即返回一个数 x 2 <= x <= 7
         老韩解读 Math.random() * (b-a) 返回的就是 0 <= 数 <= b-a
         (1) (int)(a) <= x <= (int)(a + Math.random() * (b-a +1) )
         (2) 使用具体的数给小伙伴介绍 a = 2 b = 7
         (int)(a + Math.random() * (b-a +1) ) = (int)( 2 + Math.random()*6)
         Math.random()*6 返回的是 0 <= x < 6 小数
         2 + Math.random()*6 返回的就是 2<= x < 8 小数
                 (int)(2 + Math.random()*6) = 2 <= x <= 7
         (3) 公式就是 (int)(a + Math.random() * (b-a +1) )*/
        for (int i = 0; i < 10; i++) {
            System.out.println((int) (2 + Math.random() * (7 - 2 + 1)));
        }

        int min = Math.min(1, 9);
        int max = Math.max(45, 90);
        System.out.println("min=" + min);
        System.out.println("max=" + max);
    }
}

4 Arrays类

  1. Arrays中包含一系列的static方法,用来管理操作数组
  2. toString 返回数组的字符串形式。
  3. sort 排序,自然排序和定制排序均可。
  4. binarySearch 二分查找,必须是排序好的数组。
  5. copyOf 数组元素复制。
  6. fill 数组元素填充。
  7. equals 两个数组元素内容是否相同。
  8. asList 将一组值转换成List。

 打印:

    public static void main(String[] args) {
        Integer[] integers = {1, 20, 90};
        //遍历
        for (int i = 0; i < integers.length; i++) {
            System.out.print(integers[i] + " ");
        }
        System.out.println(Arrays.toString(integers));//[1, 20, 90]
    }

Sort:

1. 可以直接使用冒泡排序 , 也可以直接使用 Arrays 提供的 sort 方法排序

2. 因为数组是引用类型, 所以通过 sort 排序后, 会直接影响到 实参 arr

3. sort 重载的, 也可以通过传入一个接口 Comparator 实现定制排序

4. 调用 定制排序 时,传入两个参数 ①排序的数组 arr        ②实现了 Comparator 接口的匿名内部类 , 要求实现 compare 方法。源码如下:

    public static <T> void sort(T[] a, Comparator<? super T> c) {
        if (c == null) {
            sort(a);
        } else {
            if (LegacyMergeSort.userRequested)
                legacyMergeSort(a, c);
            else
                TimSort.sort(a, 0, a.length, c, null, 0, 0);
        }
    }
    public static void main(String[] args) {
        Integer[] arr = {0,-9,4,7,-2};
        Arrays.sort(arr, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1-o2;//升序排列
            }
        });
        System.out.println(Arrays.toString(arr));
        Arrays.sort(arr);//默认方法就是升序
        System.out.println(Arrays.toString(arr));
    }

binarySearch、copyOf、fill、asList:

package MathClas;

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

/**
 * @ClassName ArraysClass
 * @Description Arrays类的常用方法介绍
 * @Date 2024/12/1 19:29
 * @Version V1.0
 */
public class ArraysClass {
    public static void main(String[] args) {
        //1. 使用 binarySearch 二分查找
        //2. 要求该数组是有序的. 如果该数组是无序的, 不能使用 binarySearch
        //3. 如果数组中不存在该元素, 就返回 return -(low + 1); // key not found
        Integer[] arr = {1, 2, 3, 4, 5};
        int index = Arrays.binarySearch(arr, 3);
        System.out.println("3的下标是:" + index);

        //1. 从 arr 数组中, 拷贝 arr.length 个元素到 newArr 数组中
        //2. 如果拷贝的长度 > arr.length 就在新数组的后面 增加 null
        //3. 如果拷贝长度 < 0 就抛出异常 NegativeArraySizeException
        //4. 该方法的底层使用的是 System.arraycopy()
        Integer[] newArr = Arrays.copyOf(arr, arr.length);
        System.out.println("拷贝后的newArr是" + Arrays.toString(newArr));

        Integer[] nums = new Integer[]{1, 2, 3, 4};
        Arrays.fill(nums, 10);
        System.out.println("填充后的数组为:" + Arrays.toString(nums));//全10

        Integer[] num1 = new Integer[]{1, 2, 3};
        Integer[] num2 = new Integer[]{1, 2, 3};
        //Arrays的equals只负责内容是否相同
        //下面是false
        System.out.println(Arrays.equals(num1, num2));//true
        System.out.println("num1.equals(num2):" + num1.equals(num2));//false


        //1. asList 方法, 会将 (2,3,4,5,6,1)数据转成一个 List 集合
        //2. 返回的 asList 编译类型 List(接口)
        //3. asList 运行类型 java.util.Arrays#ArrayList, 是 Arrays 类的
        // 静态内部类 private static class ArrayList<E> extends AbstractList<E>
        // implements RandomAccess, java.io.Serializable
        List aList = Arrays.asList(num1);
        System.out.println("aList=" + aList);//[1, 2, 3]
        System.out.println("运行类型是:" + aList.getClass());//java.util.Arrays$ArrayList
    }
}

5 System类

  1. exit:退出当前程序
  2. arraycopy:复制数组元素,适用于底层调用,我们正常复制数组元素还是用Arrays.copyOf
  3. currentTimeMillis:返回当前时间距离1970-1-1的00:00的毫秒数
  4. gc:垃圾回收机制
    public static void main(String[] args) {
        //exit 退出当前程序
        // System.out.println("ok1");
        // //1. exit(0) 表示程序退出
        // //2. 0 表示一个状态 , 正常的状态
        // System.exit(0);//
        // System.out.println("ok2");
        //arraycopy : 复制数组元素, 比较适合底层调用,
        // 一般使用 Arrays.copyOf 完成复制数组
        int[] src = {1, 2, 3};
        int[] dest = new int[3];// dest 当前是 {0,0,0}


        // 源码:
        /*
        public static native void arraycopy(Object src,  int  srcPos,
        Object dest, int destPos,
        int length);
        */
        // * @param src the source array. 源数组
        // srcPos: 从源数组的哪个索引位置开始拷贝
        // * @param srcPos starting position in the source array.
        // dest : 目标数组, 即把源数组的数据拷贝到哪个数组
        // * @param dest the destination array.
        // destPos: 把源数组的数据拷贝到 目标数组的哪个索引
        // * @param destPos starting position in the destination data.
        // length: 从源数组拷贝多少个数据到目标数组
        // * @param length the number of array elements to be copied
        System.arraycopy(src, 0, dest, 0, src.length);
        System.out.println("dest=" + Arrays.toString(dest));//[1, 2, 3]
        //currentTimeMillens:返回当前时间距离 1970-1-1 的毫秒数
        System.out.println(System.currentTimeMillis());
    }

6 BigInteger和BigDecimal类

BigInteger适用于存较大的整型,BigDecimal存更高精度的浮点数。BigInteger不能直接做四则运算,要用对应的方法来完成运算。

  1. add:加法
  2. subtract:减法
  3. multiply:乘法
  4. divide:除法
    public static void main(String[] args) {
        //需要处理很大的整数, long 不够用,可以使用 BigInteger 的类来搞定
        //long l = 23788888899999999999999999999L;//Long number too large
        //System.out.println("l=" + l);
        BigInteger bigInteger = new BigInteger("23788888899999999999999999999");
        BigInteger bigInteger1 = new BigInteger("100999999999999999999999999999999
99999999999999999999999999999999999999999999999999");
        System.out.println("bigInteger:" + bigInteger);
        System.out.println("bigInteger1:" + bigInteger1);
        //不能直接相加,要用方法
        BigInteger add = bigInteger.add(bigInteger1);
        System.out.println(add);
//        System.out.println(bigInteger1+bigInteger);
//Operator '+' cannot be applied to 'java.math.BigInteger', 'java.math.BigInteger'
        BigInteger subtract = bigInteger.subtract(bigInteger1);
        System.out.println(subtract);//减
        BigInteger multiply = bigInteger.multiply(bigInteger1);
        System.out.println(multiply);//乘
        BigInteger divide = bigInteger.divide(bigInteger1);
        System.out.println(divide);//除

    }
    public static void main(String[] args) {
        //当我们需要保存一个精度很高的数时, double 不够用,可以 BigDecimal
        // double d = 1999.11111111111999999999999977788d;
        // System.out.println(d);
        BigDecimal bigDecimal = new BigDecimal("1999.11");
        BigDecimal bigDecimal2 = new BigDecimal("3");
        System.out.println(bigDecimal);
        //1. 如果对 BigDecimal 进行运算, 比如加减乘除, 需要使用对应的方法
        //2. 创建一个需要操作的 BigDecimal 然后调用相应的方法即可
        System.out.println(bigDecimal.add(bigDecimal2));
        System.out.println(bigDecimal.subtract(bigDecimal2));
        System.out.println(bigDecimal.multiply(bigDecimal2));
        //System.out.println(bigDecimal.divide(bigDecimal2));//可能抛出异常 ArithmeticException
        //在调用 divide 方法时, 指定精度即可. BigDecimal.ROUND_CEILING
        //如果有无限循环小数, 就会保留 分子 的精度
        //源码中是2位
        //public static final int ROUND_CEILING = 2
        System.out.println(bigDecimal.divide(bigDecimal2, BigDecimal.ROUND_CEILING));
    }

7 日期类

日期类 - 蜡笔小新. - CSDN

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2252488.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

tauri使用github action打包编译多个平台arm架构和inter架构包踩坑记录

这些error的坑&#xff0c;肯定是很多人不想看到的&#xff0c;我的开源软件PakePlus是使用tauri开发的&#xff0c;PakePlus是一个界面化将任何网站打包为轻量级跨平台软件的程序&#xff0c;利用Tauri轻松构建轻量级多端桌面应用和多端手机应用&#xff0c;为了实现发布的时候…

通义灵码走进北京大学创新课堂丨阿里云云原生 10 月产品月报

云原生月度动态 云原生是企业数字创新的最短路径。 《阿里云云原生每月动态》&#xff0c;从趋势热点、产品新功能、服务客户、开源与开发者动态等方面&#xff0c;为企业提供数字化的路径与指南。 趋势热点 &#x1f947; 通义灵码走进北京大学创新课堂&#xff0c;与 400…

鸿蒙开发-HMS Kit能力集(地图服务、华为支付服务)

地图服务 Map Kit&#xff08;地图服务&#xff09;是鸿蒙生态下的一个地图服务&#xff0c;为开发者提供强大而便捷的地图能力&#xff0c;助力全球开发者实现个性化地图呈现、地图搜索和路线规划等功能&#xff0c;轻松完成地图构建工作。 Map Kit提供了千万级别的 Poi&…

【四轴】基于IIC通信读写MPU6050寄存器

1. 基本原理 在这篇【四轴】软件IIC通信的实现 – Dukis Blog博客中&#xff0c;我介绍了软件IIC的实现方式。而MPU6050&#xff0c;正是一种通过IIC进行通信的传感器外设。 1.1 什么是MPU6050 MPU6050 是 InvenSense 公司推出的一款6 轴惯性传感器模块&#xff0c;广泛应用于姿…

arkTS:使用ArkUI实现用户信息的持久化管理与自动填充(PersistentStorage)

arkUI&#xff1a;使用ArkUI实现用户信息的持久化管理与自动填充&#xff08;PersistentStorage&#xff09; 1 主要内容说明2 例子2.1 登录页2.1.1登陆页的相关说明2.1.1.1 持久化存储的初始化2.1.1.2 输入框2.1.1.3 记住密码选项2.1.1.4 登录按钮的逻辑2.1.1.5 注册跳转 2.1.…

基于SpringBoot+Vue的美妆购物网站

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

【SpringBoot+Vue】x-admin管理系统跟做

技术栈 前端技术说明Vue前端框架Vuex全局状态管理框架ElementUI前端UI框架Axios前端HTTP框架vue-element-admin项目脚手架 后端技术说明SpringBoot容器MVC框架MyBatisORM框架MyBatis-plusMyBatis增强工具Redis非关系型数据库 数据库准备 SET NAMES utf8mb4; SET FOREIGN_KE…

【Docker】Docker配置远程访问

配置Docker的远程访问&#xff0c;你需要按照以下步骤进行操作&#xff1a; 1. 在Docker宿主机上配置Docker守护进程监听TCP端口 Docker守护进程默认只监听UNIX套接字&#xff0c;要实现远程访问&#xff0c;需要修改配置以监听TCP端口。 ‌方法一&#xff1a;修改Docker服务…

LeetCode hot100(自用背诵、部分题目、非最优解)

点击题目可以跳转到LeetCode 哈希 两数之和 public int[] twoSum(int[] nums, int target) {int lengthnums.length;int[] ans new int[2];for (int i 0; i <length-1 ; i) {for (int j i1; j < length; j) {if(nums[i]nums[j]target){ans[0]i;ans[1]j;}}}return an…

Android -- 简易音乐播放器

Android – 简易音乐播放器 播放器功能&#xff1a;* 1. 播放模式&#xff1a;单曲、列表循环、列表随机&#xff1b;* 2. 后台播放&#xff08;单例模式&#xff09;&#xff1b;* 3. 多位置同步状态回调&#xff1b;处理模块&#xff1a;* 1. 提取文件信息&#xff1a;音频文…

基础Web安全|SQL注入

基础Web安全 URI Uniform Resource Identifier&#xff0c;统一资源标识符&#xff0c;用来唯一的标识一个资源。 URL Uniform Resource Locator&#xff0c;统一资源定位器&#xff0c;一种具体的URI&#xff0c;可以标识一个资源&#xff0c;并且指明了如何定位这个资源…

ESG研究报告白皮书与ESG治理报告合集(2020-2023年)

一.资料范围&#xff1a;&#xff08;1&#xff09;ESG白皮书及指南;&#xff08;2&#xff09;ESG研究报告,&#xff08;3&#xff09;ESG治理报告分析&#xff08;4&#xff09;上市公司ESG报告&#xff08;知名企业&#xff09; 二、资料用途&#xff1a;可以分析研究企业E…

WPF指示灯的实现方式

WPF指示灯的实现方式 样式 XAML <Button x:Name"Btn1" Width"25" Height"25" Grid.Row"0" Grid.Column"1" Margin"10 5 5 5 "><Button.Template><ControlTemplate TargetType"Button"…

初识QT第一天

思维导图 利用Qt尝试做出原神登陆界面 import sys from PyQt6.QtGui import QIcon, QPixmap, QMovie from PyQt6.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QLineEdit# 封装原神窗口类 class Genshin(QWidget):# 构造函数def __init__(self):# 初始化父类…

【Linux】线程池设计 + 策略模式

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Linux 目录 一&#xff1a;&#x1f525; 线程池 1-1 ⽇志与策略模式1-2 线程池设计1-3 线程安全的单例模式1-3-1 什么是单例模式1-3-2 单例模式的特点1-3-3 饿汉实现⽅式和懒汉实现⽅式1-3-4 饿汉…

vim插件管理器vim-plug替代vim-bundle

文章目录 vim-plug与vim-bundle对比vim-plug安装vim-plug管理安装插件相关文章 vim-plug与vim-bundle对比 vim-plug 和 vim-bundle 都是 Vim 的插件管理器&#xff0c;但它们有一些关键的区别。以下是两者的主要对比&#xff1a; 易用性和简洁性 vim-plug: 易用性: vim-plug …

107.【C语言】数据结构之二叉树求总节点和第K层节点的个数

目录 1.求二叉树总的节点的个数 1.容易想到的方法 代码 缺陷 思考:能否在TreeSize函数内定义静态变量解决size的问题呢? 其他写法 运行结果 2.最好的方法:分而治之 代码 运行结果 2.求二叉树第K层节点的个数 错误代码 运行结果 修正 运行结果 其他写法 1.求二…

【代码随想录day48】【C++复健】739. 每日温度;496.下一个更大元素 I;503.下一个更大元素II

739. 每日温度 一顿操作猛如虎&#xff0c;一看击败5%。一眼顶针&#xff0c;鉴定为在存栈的时候把值和下标一起存了&#xff0c;所以导致了问题。 class Solution { public:vector<int> dailyTemperatures(vector<int>& temperatures) {stack<vector<…

vscode + conda + qt联合开发

安装vscode 安装conda 清华大学开源软件镜像(Anaconda下载)_清华大学镜像-CSDN博客 conda create新建一个环境&#xff0c;激活这个环境&#xff0c;然后安装pyside6 pip install pyside6 -i https://pypi.tuna.tsinghua.edu.cn/simple 安装成功后输入 pip list查看是否安装…

第十一篇 绘图matplotlib.pyplot的使用

文章目录 摘要安装方法入门案例使用plt绘图使用ax绘图plt.figure参数plot参数案例一 绘制红色实心的点状图案例二 绘制红色的破折线图案例三 绘制两条线颜色总结设置标题、轴名称、图例使用plt实现绘图使用ax实现绘图legend()中loc设置刻度plt自定义刻度ax自定义刻度plt.title …