java核心类

一,String字符串

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

        String str1 = "Hello";String str2 = str1.concat(" World"); // 使用concat方法连接字符串,返回一个新的字符串对象System.out.println(str1); // 输出:Hello,原始字符串对象并未改变System.out.println(str2); // 输出:Hello World,新的字符串对象被创建并赋给str2str1="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.valueOfString.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;}@Overridepublic 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,定义枚举类的实例值返回内容@Overridepublic 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.mzph.cn/news/826285.shtml

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

相关文章

C语言:复习

文章目录 思维导图数组和指针库函数的模拟实现判断大小端 最近知识学的差不多了,因此开始复习,本篇开始的是对于C语言的复习 思维导图 下面就依据下图,进行内容的整理 数组和指针 这个模块算是C语言中比较大的一个模块了,具体概…

IO——线程

1. 什么是线程 1.1概念 线程是一个轻量级的进程,为了提高系统的性能引入线程。 线程和进程都参与统一的调度。 在同一个进程中可以创建的多个线程, 共享进程资源。 (Linux里同样用task_struct来描述一个线程) 1.2进程和线程的区别 相同点…

【Vue】Vue中使一个div铺满全屏

在Vue中实现div全屏铺满的方式与纯CSS实现类似&#xff0c;只是在Vue组件中应用CSS的方式略有不同。 最近在项目开发中&#xff0c;就遇到了这个问题&#xff0c;特此记录一下&#xff0c;方便大伙避坑。 有这么一段代码&#xff1a; <template><div class"fu…

JS - 在JS中常用的运算符

学过编程语言的都知道一种大部分编程语言其实都存在许多相似的地方&#xff0c;比如数学中的四则运算&#xff0c;这个在JS中同样生效&#xff0c;不过在JS中&#xff0c;有进行部分拓展&#xff0c;这个也是其他语言中都有的&#xff0c;每个语言都有其功能和特性&#xff0c;…

流媒体协议--RTMP

文章目录 RTMP播放基本流程TCP握手过程RTMP握手过程connect连接createStream 创建流play 播放命令deleteStream删除流RTMP数据组成 RTMP(Real Time Messaging Protocol)是一个应用层协议&#xff0c;主要用于在Flash player和服务器之间传输视频、音频、控制命令等内容。 该协议…

类和对象-对象特性-类对象作为类成员

类对象作为类成员 #include<iostream> #include<string> using namespace std; class Phone{ public:Phone(string pName){m_pNamepName;}string m_pName; }; class Person{ public:Person(string name,string pName):m_Name(name),m_Phone(pName){}string m_Nam…

【笔试强训_Day06】

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

C++:运算符重载和“const”成员

hello&#xff0c;各位小伙伴&#xff0c;本篇文章跟大家一起学习《C&#xff1a;运算符重载》&#xff0c;感谢大家对我上一篇的支持&#xff0c;如有什么问题&#xff0c;还请多多指教 &#xff01; 文章目录 赋值运算符重载1. 运算符重载2.赋值运算符重载第一个点第二个点&…

迅雷下载不了的资源怎么下载?

我想下载Boost库&#xff0c;但是下载不下来 用迅雷下载是一直卡在0k 后来尝试在centos上用wget进行下载&#xff0c;竟然可以 wget https://boostorg.jfrog.io/artifactory/main/release/1.85.0/source/boost_1_85_0.tar.gz

揭开ChatGPT面纱(一):准备工作(搭建开发环境运行OpenAI Demo)

文章目录 序言&#xff1a;探索人工智能的新篇章一、搭建开发环境二、编写并运行demo1.代码2.解析3.执行结果 本博客的gitlab仓库&#xff1a;地址&#xff0c;本博客对应01文件夹。 序言&#xff1a;探索人工智能的新篇章 随着人工智能技术的飞速发展&#xff0c;ChatGPT作为…

go 语言 mage 安装踩坑

具体安装代码&#xff1a;mage 官方地址&#xff1a;Mage :: Mage git clone https://github.com/magefile/mage cd mage go run bootstrap.go 在go部署完后&#xff0c;执行上面的脚本&#xff0c;发现最后一句老是执行不成功&#xff1a; rootBDGF-7FPQW93:/home/gw00241401…

2024燃动智火-业务视角的中国企业AI+学习发展报告

来源&#xff1a;新华三 学习型组织的数字化转型是众多企业关注的焦点&#xff0c;数字战略需要人才升级&#xff0c;数字 化学习加速人才培养。AI 技术在学习中的运用&#xff0c;为企业学习型组织的数字化转型插 上了飞翔的翅膀。这份报告解码了AI 时代企业的学习发展&#…

混合现实(MR)开发框架

混合现实&#xff08;MR&#xff09;开发框架为开发者提供了构建MR应用程序所需的基本工具和功能。它们通常包括3D引擎、场景图、输入系统、音频系统、网络功能以及支持同时处理现实世界和虚拟世界信息的功能。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&…

springboot+ssm基于Java的小型企业银行账目管理系统代码Lw

本毕业设计课题要求学生基于软件工程方法&#xff0c;根据课题的需求&#xff0c;给出小型企业银行账目管理系统概要设计、详细设计、数据库的设计以及系统实现和测试&#xff0c;并撰写规范的毕业设计说明书。该系统的主要模块有&#xff1a;系统管理、帐目管理、查询统计、用…

vue.runtime.esm.js?c320:4625 [Vue warn]: Failed to resolve directive: lazy

使用图片懒加载插件报错 原因&#xff1a;vue2与懒加载插件默认版本不相容导致的 解决方法&#xff1a;重新安装lazyLoad npm install vue-lazyload1.3.3 --save-dev

如何使用 ArcGIS Pro 制作边界晕渲效果

在某些出版的地图中&#xff0c;边界有类似于“发光”的晕渲效果&#xff0c;这里为大家介绍一下如何使用ArcGIS Pro 制作这种晕渲效果&#xff0c;希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载的行政区划数据&#xff0c;除了行政区划数据&#xff0c…

ruoyi-nbcio-plus基于vue3的flowable多租户机制

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 http://122.227.135.243:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a…

MyBatis 面试题(八)

1. MyBatis-Plus 是什么框架? MyBatis-Plus 是一个 MyBatis 的增强工具&#xff0c;它在 MyBatis 的基础上进行了功能扩展和增强&#xff0c;旨在简化开发、提高效率。这个框架提供了许多方便的功能&#xff0c;如自动生成 MyBatis 的 mapper 接口以及对应的实现类&#xff0…

VMWare ubuntu 18.04 网卡丢失

平台信息&#xff1a; ubuntu 18.04 ifconfig效果&#xff1a; lo: flags73<UP,LOOPBACK,RUNNING> mtu 65536inet 127.0.0.1 netmask 255.0.0.0inet6 ::1 prefixlen 128 scopeid 0x10<host>loop txqueuelen 1000 (Local Loopback)RX packets 280 bytes 20…

数据库服务器NTP调整

查看时间&#xff1a; watch date --NTP配置 1、查看时间 ntpdate -q XX.XX.192.3 ntpdate XX.XX.192.3 2、配置时间服务器 vi /etc/ntp.conf server XX.XX.192.3 iburst 3、设置时间不允许回调 vi /etc/sysconfig/ntpd OPTIONS"-u ntp:ntp -p /var/run/ntpd.p…