码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • java基础10


    包装类、String类、StringBuffer类、StringBuilder类、Math类、Arrays类、System类、BigInteger和BigDecimal类、日期类

    • 一、八大Wapper类
      • 包装类的分类
      • 包装类和基本数据类型的转换
      • 包装类型和String类型的相互转化
      • Integer类和Character类的常用方法
      • Integer的创建机制(易错!易忘!)
    • 二、String类
      • 创建String对象的两种方式
        • 两种方式的区别
        • String的内存布局
        • 习题
      • 字符串特性(通过习题充分理解String中的final)
      • String类的常见方法
        • 常见方法
    • 三、StringBuff类
      • 基本介绍
      • StringBuff和String对比
      • StringBuff的构造器
      • String和StringBuff的相互转换
      • StringBuff类的常用方法
      • 习题
    • 四、StringBuilder类
      • StringBuilder的方法
      • String,StringBuffer,StringBuilder对比
        • String,StringBuffer,StringBuilder选择
    • 五、Math类
      • 常见方法
    • 六、Arrays类
      • 常见方法
      • Arrays.sort()定制排序:
    • 七、System类
      • 常见方法和案例
    • 八、BigInteger和BigDecimal类
      • 常见方法
      • 舍入模式
    • 九、日期类
      • 第一代日期类
        • 第一代日期类的应用
      • 第二代日期类
        • Calendar应用实例
      • 第三代日期类
        • 前两代的不足
        • 第三代的常见方法(jdk8加入的 )
        • DateTimeFormatter格式化日期类
        • Instant时间戳
        • 第三代日期类的更多方法

    一、八大Wapper类

    包装类的分类

    在这里插入图片描述

    包装类和基本数据类型的转换

    其他的包装类类似
    在这里插入图片描述
    注意:自动装箱右边必须是对应的基本数据类型,不存在转型

    经典习题:
    三目运算符中,数据类型会自动提升到最高
    在这里插入图片描述

    包装类型和String类型的相互转化

    在这里插入图片描述
    补充:String 转Integer还有一种方式:Integer.parseInt(string);

    Integer类和Character类的常用方法

    在这里插入图片描述

    Integer的创建机制(易错!易忘!)

    -128~127会放在缓存中
    在这里插入图片描述

    // -128-127是直接从缓存中的数组返回,否则新建Integer对象
       public static Integer valueOf(int i) {
            if (i >= IntegerCache.low && i <= IntegerCache.high)
                return IntegerCache.cache[i + (-IntegerCache.low)];
            return new Integer(i);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    ==只要遇到基本数据类型就是判断是否值相等
    在这里插入图片描述

    二、String类

    在这里插入图片描述
    Serializable表示可以串行化,即对象可以在网络中传播
    Comparable表示对象可以比较
    String是final修饰的不可以被继承
    String有个private final char value[];用来存放字符串内容(char数组value用final修饰,只是说栈里的这个叫value的引用地址不可变。没有说堆里数组本身数据不可变)

    创建String对象的两种方式

    两种方式的区别

    在这里插入图片描述

    String的内存布局

    在这里插入图片描述

    习题

    在这里插入图片描述

    字符串特性(通过习题充分理解String中的final)

    在这里插入图片描述
    String的底层是private final char value[],这边的final和private确保了value数组的地址不会变,但是可以在常量池中新建新的对象,让value数组的引用指向新的对象,所以看似字符串在变,实则是底层的value数组的引用指向在变,value数组的地址并没有变/font>


    编译器会优化!!!:如果是常量池中的字符串(常量)拼接会直接用一个对象完成拼接
    在这里插入图片描述


    如果是使用引用(变量)拼接,会新建一个StringBuilder()对象,然后使用它的append()方法
    在这里插入图片描述
    在这里插入图片描述


    这题比较综合,首先形参是引用类型会影响实参的,其次是因为String是final修饰的,它没有把常量池中的hsp改成java而是新建了一个java,此时形参中str的指向java,实参中的str指向的是hsp
    在这里插入图片描述

    String类的常见方法

    常见方法

    在这里插入图片描述


    indexOf()和lastIndesOf()除了指定字符也可以是指定的字符串,返回字符串第一个字符出现的下标
    在这里插入图片描述


    注意substring的使用
    在这里插入图片描述


    注意:

    • replace不会改变原来的字符串,而是返回一个替换后的字符串
    • split(字符串str),以字符串为标准进行分割,返回一个String数组(不包含str ),如果str中有特殊字符要加转译符
    • s1.compareTo(s2)比较字符串时,前面和后面每个字符完全一样,返回 0;前面每个字符完全一样,返回:后面就是字符串长度差;前面每个字符不完全一样,返回:出现不一样的字符 ASCII 差
      在这里插入图片描述

    format的使用
    在这里插入图片描述

      		String s1 = "abc";
            String s = "add";
            int a = 1;
            String ss = String.format("输出%s%s%d", s1, s, a);
            String sss = String.format("输出%s%s%d");
            System.out.printf("输出%s%s%d%n", s1, s, a);//ok
            System.out.println("输出%s%s%d", s1, s, a);//报错,println
            System.out.println(ss);//ok
            System.out.println(sss,s1,s,a);//报错
            System.out.printf(sss,s1,s,a);//ok
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    三、StringBuff类

    基本介绍

    在这里插入图片描述

    StringBuff和String对比

    在这里插入图片描述
    主要就是String 中的char[] value是final修饰的,并且存放在常量池中的,而StringBuff中的char[] value没有final修饰,并且是存放在堆中的, 在使用过程中只有长度不够时才会改变引用s的指向

    StringBuff的构造器

    在这里插入图片描述

    String和StringBuff的相互转换

    StringBuff类的常用方法

    注意:delete,replace中的start,end都是[start,end),会改变原来的字符串,insert是在指定索引前面插入字符串

    习题

    StringBuff的append方法中,如果传的是null会调用父类的appendNull方法,该方法把null字符数组{‘n’,‘u’,‘l’,‘l’}放进了byte[]数组中。

    在这里插入图片描述

    四、StringBuilder类

    在这里插入图片描述
    在这里插入图片描述

    StringBuilder的方法

    j

    String,StringBuffer,StringBuilder对比

    在这里插入图片描述

    String,StringBuffer,StringBuilder选择

    在这里插入图片描述

    五、Math类

    常见方法

    注意:round()方法就是加上0.5向下取整
    在这里插入图片描述

    在这里插入图片描述
    输出[a,b]的随机整数x
    (int)a<=x<=(int)(a+Math.random()*(b-a+1))
    因为,Math.random()是[0,1)

    六、Arrays类

    常见方法

    在这里插入图片描述

    Arrays.sort()定制排序:

       Integer[] arr = new Integer[10];
            for (int i = 0; i < 10; i++) {
                arr[i] = (int) (Math.random() * 100);
            }
            // 重写了Comparator方法,这个方法会影响底层二叉排序的判定,如果返回结果(o1-o2)大于0就交换o1和o2的位置(o1>o2就换位置),小于0就不交换位置
            Arrays.sort(arr, new Comparator() {
                @Override
                public int compare(Object o1, Object o2) {
                    Integer integer01 = (Integer) o1;
                    Integer integer02 = (Integer) o2;
                    return integer01 - integer02;
                }
            });
            for (Integer integer : arr) {
                System.out.println(integer + " ");
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    binarySearch(arr , key)方法是二分查找,要求数组必须是有序的,如果找到则返回下标,找不到返回-(把key插入数组中后所在下标+1)


    在这里插入图片描述
    4)拷贝arr数组中长度为arr.length个元素
    5)数组中所有元素都设置为99
    6)比较两个数组中的元素是否一致
    7)转成集合, [2,3,4,5,6,1]

    七、System类

    常见方法和案例

    tip:一个类重写了finalize()方法后,当出现空的引用时,可以调用系统的gc
    在这里插入图片描述
    1)exit(0),0代表正常状态退出
    2)arraycopy(src,0,dest,0,3),从src的下标0开始拷贝到dest数组的0位置,拷贝长度为3个元素
    在这里插入图片描述
    3)返回的是long类型

    八、BigInteger和BigDecimal类

    在这里插入图片描述

    常见方法

    BigInteger的
    在这里插入图片描述
    注意:BigInteger(String s),int类型传参的构造器是私有的,一般里面只能传字符串
    在这里插入图片描述

    注意:BigDecimal()里面可以放数字int的double的都可以,除的时候BigDecimal.ROUND_CEILING可以保留分子精度

    在这里插入图片描述

    舍入模式

    BigDecimal.ROUND_CEILING已经弃用
    现在要先用setScale设置精度

    		BigDecimal bigDecimal = new BigDecimal("923252.22322322");
            BigDecimal res2 = bigDecimal.multiply(new BigDecimal("123.543253"));
            BigDecimal bigDecimal1 = res2.setScale(5, RoundingMode.CEILING);
            System.out.println(bigDecimal1)
    
    • 1
    • 2
    • 3
    • 4

    九、日期类

    第一代日期类

    在这里插入图片描述

    第一代日期类的应用

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    第二代日期类

    在这里插入图片描述
    在这里插入图片描述

    Calendar应用实例

    这边的calendar是单例设计模式

    在这里插入图片描述
    在这里插入图片描述

    第三代日期类

    前两代的不足

    在这里插入图片描述

    第三代的常见方法(jdk8加入的 )

    注意:getMonth() 英文的月份 getMonthValue() 数字月份

    DateTimeFormatter格式化日期类

    在这里插入图片描述

    Instant时间戳

    在这里插入图片描述
    在这里插入图片描述

    第三代日期类的更多方法

    在这里插入图片描述

  • 相关阅读:
    仅售 15 美元,树莓派 Zero W 继任者终于发布,可惜没躲过全球缺“芯”
    使用阿里云服务器三分钟搭建网站
    全平台自动去水印源码系统 一键下载高清无水印视频 支持全平台 带完整搭建部署教程
    首发出炉Yolov5/Yolov7涨点神器:华为诺亚2023极简的神经网络模型 VanillaNet---VanillaBlock助力检测,实现暴力涨点
    延时 启动exe程序
    限时开源,来自大佬汇总的Kafka限量笔记,绝对不会后悔!
    手把手教你搭建ELK-新手必看-第六章:搭建filebeat
    LightDB中的存储过程(八)—— 包
    深入解析 Azure 机器学习平台:架构与组成部分
    【前端】webpack5的配置及基本使用
  • 原文地址:https://blog.csdn.net/weixin_43903745/article/details/126234654
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号