java核心类

news2024/11/18 9:04:03

一,String字符串

1.1,String字符串是引用类型,且不可变

        String str1 = "Hello";
        String str2 = str1.concat(" World"); // 使用concat方法连接字符串,返回一个新的字符串对象
        System.out.println(str1); // 输出:Hello,原始字符串对象并未改变
        System.out.println(str2); // 输出:Hello World,新的字符串对象被创建并赋给str2
        str1="test";
         System.out.println(str1);//输出test

也就是说,String字符串并不会被修改,只是会重新找一个内存来存储,相当于新建一个引用类型的数据.

1.2,字符串的比较必须使用equals()方法而不能用

String str1 = "Hello";
String str2 = "world";
String str3 = "world";
System.out.println(str1==str2); // 输出:false
System.out.println(str2==str3); // 输出:true,//Java编译器在编译期,会自动把所有相同的字符串当作一个对象放入常量池,自然s1和s2的引用就是相同的。
System.out.println(str1.equals(str2)); // 输出:false

1.3,字符串的其他常用方法

        // 是否包含子串:
        "Hello".contains("ll"); // true
        //其他搜索字串
        "Hello".indexOf("l"); // 2
        "Hello".lastIndexOf("l"); // 3
        "Hello".startsWith("He"); // true
        "Hello".endsWith("lo"); // true
        //提取字串
        "Hello".substring(2); // "llo"
        "Hello".substring(2, 4); //"ll"
        //去除首尾空格
        "  \tHello\r\n ".trim(); // "Hello"
        //字符串判空
        "".isEmpty(); // true,因为字符串长度为0
        "  ".isEmpty(); // false,因为字符串长度不为0
        "  \n".isBlank(); // true,因为只包含空白字符
        " Hello ".isBlank(); // false,因为包含非空白字符
        //替换字符replace或者正则表达式
        String s = "hello";
        s.replace('l', 'w'); // "hewwo",所有字符'l'被替换为'w'
        s.replace("ll", "~~"); // "he~~o",所有子串"ll"被替换为"~~"
        //分割字符串
        String s = "A,B,C,D";
        String[] ss = s.split("\\,"); // {"A", "B", "C", "D"}
        //拼接字符串
        String[] arr = {"A", "B", "C"};
        String s = String.join("***", arr); // "A***B***C"
        //其他类型转化为字符串:String.valueOf
        String.valueOf(123); // "123"
        String.valueOf(45.67); // "45.67"
        String.valueOf(true); // "true"
        //char []和String本质上同个东西,可以相互转化
        char[] cs = "Hello".toCharArray(); // String -> char[]
        String s = new String(cs); // char[] -> String

1.4,StringBuilder类

在在上文中,我们说过STring对象不可修改,而是不断新分配内存给它,那字符串操作频繁了,每次都会创建新的字符串对象,然后扔掉旧的字符串。这样,绝大部分字符串都是临时对象,不但浪费内存,还会影响GC效率。
于是,java标准库提供了StringBuilder,它是一个可变对象,可以预分配缓冲区,这样,往StringBuilder中新增字符时,不会创建新的临时对象,而且它还支持链式操作:

StringBuilder sb = new StringBuilder(1024);
        sb.append("Mr ")
          .append("Bob")
          .append("!")
          .insert(0, "Hello, ");
        System.out.println(sb.toString());

1.5,StringJoiner拼接数组

分隔符拼接数组的需求很常见,所以Java标准库还提供了一个StringJoiner:

 String[] names = {"Bob", "Alice", "Grace"};
 StringJoiner sj = new StringJoiner(", ");
 for (String name : names) {
     sj.add(name);
 }
 System.out.println(sj.toString());//Bob, Alice, Grace

二,包装类

我们已经知道,Java的数据类型分两种:

基本类型:byte,short,int,long,boolean,float,double,char
引用类型:所有class和interface类型

引用类型可以赋值为null,表示空,但基本类型不能赋值为null,为了实现把int基本类型变成一个引用类型,我们可以定义一个Integer类,它只包含一个实例字段int,这样,Integer类就可以视为int的包装类(Wrapper Class):

public class Integer {
    private int value;
    public Integer(int value) {

        this.value = value;
    }
    public int intValue() {
        return this.value;
    }
    public static Integer valueOf(int intValue){
        Integer instance=new Integer(intValue);
        return instance;
    }
}

实际上,因为包装类型非常有用,Java核心库为每种基本类型都提供了对应的包装类型:
请添加图片描述

我们可以直接使用,并不需要自己去定义,对于包装类型,使用的方式如下:

//创建使用Integer.valueOf方法
 Integer n2 = Integer.valueOf(100);
 //访问使用该实例的intValue()方法
 System.out.println(n2.intValue());

因为int和Integer可以相互转化,所以可以利用这一点让编译器自动拆箱:

Integer n = 100; // 编译器自动使用Integer.valueOf(int)
int x = n; // 编译器自动使用Integer.intValue()

但是因为包装类型是引用类型,所以需要使用equals()进行比较:a.equals(b)

三,枚举类

枚举类的定义使用关键字enum来进行:

enum Weekday {
    SUN, MON, TUE, WED, THU, FRI, SAT;
}

定义的enum实际上就是一个class类.
因为enum是一个class,每个枚举的值都是class实例,因此,这些实例有一些方法:

//name()方法返回常量名
String s = Weekday.SUN.name(); // "SUN"
//ordinal()方法返回索引值
int n = Weekday.MON.ordinal(); // 1

枚举类的实例,还可以定义一些属性值:

enum Weekday {
    MON(1, "星期一"), TUE(2, "星期二"), WED(3, "星期三"), THU(4, "星期四"), FRI(5, "星期五"), SAT(6, "星期六"), SUN(0, "星期日");

    public final int dayValue;
    private final String chinese;

    private Weekday(int dayValue, String chinese) {
        this.dayValue = dayValue;
        this.chinese = chinese;
    }

    @Override
    public String toString() {
        return this.chinese;
    }
}

枚举通常会和switch一起使用:

public class HelloWorld {
    public static  void  main (String[] args){
        Weekday day = Weekday.SUN;
        switch(day.dayValue) {
            case 1:
            case 2:
            case 3:
            case 4:
            case 5:
                System.out.println("Today is " + day + ". Work at office!");
                break;
            case 6:
            case 0:
                System.out.println("Today is " + day + ". Work at home!");
                break;
            default:
                throw new RuntimeException("cannot process " + day);
        }
    }
}
enum Weekday {
    MON(1, "星期一"), TUE(2, "星期二"), WED(3, "星期三"), THU(4, "星期四"), FRI(5, "星期五"), SAT(6, "星期六"), SUN(0, "星期日");

    public final int dayValue;
    private final String chinese;

    private Weekday(int dayValue, String chinese) {
        this.dayValue = dayValue;
        this.chinese = chinese;
    }
    //覆写toString,定义枚举类的实例值返回内容
    @Override
    public String toString() {
        return this.chinese;
    }
}

四,记录类record

我们平时非常常用的一种类,在我们想要定一个类的时候,肯定是先定义需要的属性和获取该值的方法,每次都写就很麻烦,于是我们就想把它简化掉,让编辑器自动帮我们写,于是就有了记录类:使用record方法进行修饰.

public final class Point {
    private final int x;
    private final int y;

    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public int x() {
        return this.x;
    }

    public int y() {
        return this.y;
    }
}

等价于:

record Point(int x, int y) {}

过使用record类,可以更加简洁地定义数据传输对象,并且省去了编写大量重复代码的工作。

五,大数类

BigInteger类,java.math.BigInteger就是用来表示任意大小的整数。BigInteger内部用一个int[]数组来模拟一个非常大的整数:
对BigInteger做运算的时候,只能使用实例方法,例如,加法运算:

BigInteger i1 = new BigInteger("1234567890");
BigInteger i2 = new BigInteger("12345678901234567890");
BigInteger sum = i1.add(i2); // 12345678902469135780

那要是浮点数呢?我们可以使用BigDecimal表示一个任意大小且精度完全准确的浮点数。

BigDecimal bd = new BigDecimal("123.4567");
System.out.println(bd.multiply(bd)); // 15241.55677489

六,Math类

提供了一些数学的计算方法.

//绝对值
Math.abs(-100); // 100
//求最大或者最小
Math.max(100, 99); // 100
Math.min(1.2, 2.3); // 1.2
//求x的y次方
Math.pow(2, 10); // 2的10次方=1024
//求根号
Math.sqrt(2); // 1.414...
//求e的x次方
Math.exp(2); // 7.389...
//三角函数
Math.sin(3.14); // 0.00159...
Math.cos(3.14); // -0.9999...
Math.tan(3.14); // -0.0015...
Math.asin(1.0); // 1.57079...
Math.acos(1.0); // 0.0
//几个常量
double pi = Math.PI; // 3.14159...
double e = Math.E; // 2.7182818...
Math.sin(Math.PI / 6); // sin(π/6) = 0.5

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

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

相关文章

Linux的学习之路:15、文件(2)

摘要 这里就说一下文件描述符和重定向以及缓冲区 目录 摘要 一、文件描述符 1、0 、1、2 2、分配规则 二、重定向 三、缓冲区 四、代码 一、文件描述符 1、0 、1、2 文件描述符(File Descriptor,简称 fd)是计算机科学中的一个术语…

OpenHarmony实战开发-如何利用panel实现底部面板内嵌套列表。

介绍 本示例主要介绍了利用panel实现底部面板内嵌套列表,分阶段滑动效果场景。 效果图预览 使用说明 点击底部“展开”,弹出panel面板。在panel半展开时,手指向上滑动panel高度充满页面,手指向下滑动panel隐藏。在panel完全展开…

IO——进程间通讯 IPC

1. 进程间通信方式 (1) 早期进程间通信: 无名管道(pipe)、有名管道(fifo)、信号(signal) (2) system V IPC: 共享内存(shared memory)、消息队列(message queue)、信号灯集(semaphore set) (3) BSD: 套接字(socket) 2. 无名管道 2.1特点 …

局域网管理软件,适合在局域网内的管理软件有哪些?

信息技术的不断发展,局域网在企业、学校等机构中得到了广泛应用。 局域网不仅能够提高数据传输效率,还能实现资源共享和协同工作。 为了更好地管理和维护局域网,需要使用一些专业的局域网管理软件。 一、局域网的应用范围 局域网&#xff…

ruoyi element-ui 实现拖拉调整图片顺序

ruoyi element-ui 实现拖拉调整图片顺序 安装sortablejs https://sortablejs.com/npm 安装sortablejs npm install sortablejs --save相关options var sortable new Sortable(el, {group: "name", // or { name: "...", pull: [true, false, clone, …

华为 2024 届实习招聘——硬件-电源机试题(四套)

华为 2024 届实习招聘——硬件-电源机试题(四套) 部分题目分享,完整版带答案(有答案,答案非官方,未仔细校正,仅供参考)(共四套) 获取(WX:didadidadidida313&…

优思学院|ISO45001职业健康安全管理体系是什么?

ISO45001:2018是新公布的国际标准规范,全球备受期待的职业健康与安全国际标准(OH&S)于2018年公布,并将在全球范围内改变工作场所实践。ISO45001将取代OHSAS18001,成为全球工作场所健康与安全的参考。 ISO45001:201…

完整、免费的把pdf转word文档

在线工具网 https://www.orcc.online/pdf 支持pdf转word,免费、完整、快捷 登录网站 https://orcc.online/pdf 选择需要转换的pdf文件: 等待转换完成 点击蓝色文件即可下载 无限制,完整转换。

LLM推理加速,如何解决资源限制与效率挑战

©作者|Zane 来源|神州问学 LLM加速推理,GPU资源破局之道。 引言 大型语言模型(LLM)已经在多种领域得到应用,其重要性不言而喻。然而,随着这些模型变得越来越普遍,对GPU资源的需求也随之激增&#xff…

问卷回收率太低?用这几个小技巧轻松提升!

在进行调查研究时,高回收率是保障数据质量和调研成果有效性的关键因素之一。然而,有时候我们面对的情况是调查问卷的回收率较低,这可能会影响到数据的客观性和准确性。在这种情况下,我们需要采取措施来提高调查问卷的回收率&#…

MapReduce 机理

1.hadoop 平台进程 Namenode进程: 管理者文件系统的Namespace。它维护着文件系统树(filesystem tree)以及文件树中所有的文件和文件夹的元数据(metadata)。管理这些信息的文件有两个,分别是Namespace 镜像文件(Namespace image)和操作日志文件(edit log)&#xff…

Python --- 在python中安装NumPy,SciPy,Matplotlib以及scikit-learn(Windows平台)

在python中安装NumPy,SciPy,Matplotlib以及scikit-learn(Windows平台) 本文是针对(像我一样的)python新用户所写的,刚刚在电脑上装好python之后,所需的一些常见/常用的python第三方库/软件包的快速安装指引。包括了这些常用安装包…

0-1背包问题:贪心算法与动态规划的比较

0-1背包问题:贪心算法与动态规划的比较 1. 问题描述2. 贪心算法2.1 贪心策略2.2 伪代码 3. 动态规划3.1 动态规划策略3.2 伪代码 4. C语言实现5. 算法分析6. 结论7. 参考文献 1. 问题描述 0-1背包问题是组合优化中的一个经典问题。假设有一个小偷在抢劫时发现了n个…

C语言--函数递归

目录 1、什么是递归? 1.1 递归的思想 1.2 递归的限制条件 2. 递归举例 2.1 举例1:求n的阶乘 2.2 举例2:顺序打印⼀个整数的每⼀位 3. 递归与迭代 扩展学习: 早上好,下午好,晚上好 1、什么是递归&…

【Web】DASCTF X CBCTF 2022九月挑战赛 题解

目录 dino3d Text Reverser cbshop zzz_again dino3d 进来是一个js小游戏 先随便玩一下,显示要玩够1000000分 直接console改分数会被检测 先是JSFinder扫一下,扫出了check.php 到js里关键词索引搜索check.php 搜索sn,发现传入的参数是…

上古掌控安全的神-零:Spring Security5.x到Spring Security6.x的迁移

1. 本文概述 之前有写过一篇关于Spring Security的文章,但那已经是相对比较旧的版本了,就目前Spring Security6.0来说,这其中出现了不少的变动和更新,很多API的使用也是有不小的变化,所以我觉得有必要再写几篇文章学习…

OpenCV4.10使用形态运算提取水平线和垂直线

返回:OpenCV系列文章目录(持续更新中......) 上一篇:OpenCV的查找命中或未命中 下一篇:OpenCV4.9图像金字塔-CSDN博客 目标 在本教程中,您将学习如何: 应用两个非常常见的形态运算符(即膨胀和…

java/C#语言开发的医疗信息系统10套源码

java/C#语言开发的医疗信息系统10套源码 云HIS系统源码,云LIS系统源码,PEIS体检系统,手麻系统 源 码,PACS系统源码,微源预约挂号源码,医院绩效考核源码,3D智能导诊系统源码,ADR药物…

数据分析场景,连号相关业务

连号相关业务 业务场景:现在需要从a列一堆编号中,将连号范围在10以内的数据分别分成一组。 先看实先效果 演示的为db2数据库,需要含有窗口函数,或者可以获取到当前数据偏移的上一位数据 第一步:将A列数据正序第二步…

【笔试强训_Day06】

文章目录 1.字符串相乘 1.字符串相乘 题目链接 解题思路: 高精度乘法,注意要学会下面这种列式相乘的形式🍎 注意细节❗: ① 🍎 首先把列式相乘的数据都存放到数组中去, 然后再对数组中的数据进行取余进…