javaSE学习笔记(四)常见类,基本数据类型包装类,StringBufferStringBuilder

news2024/11/23 15:11:31

目录

三、面向对象

16.Object类

方法

==和equals()

17.String类

注意

构造方法

String的最大长度

String的底层存储结构

字符串的常量池机制

String类的方法

String类的判断功能

String类的获取功能

String类的转换功能

String类拼接

String类的其他功能

18.Math类

19.Random类

20.System类

垃圾回收机制

21.BigInteger类

22.BigDecimal类

23.Date类

24.Calendar类

25.SimpleDateFormat类

26.Arrays类

27.基本类型包装类

基本类型和包装类对应关系

Integer类为例

构造方法

String和int类型的相互转换

JDK5+自动装箱和拆箱

Integer的常量池机制

28.StringBuffer&StringBuilder

StringBuffer

StringBuffer和String的区别

构造方法

成员方法

StringBuffer初始长度和扩容机制

StringBuffer和String的相互转换

StringBuffer和StringBuilder

String,StringBuffer&StringBuilder的区别


三、面向对象

API:应用程序编程接口,学习jdk提供的类,就是学习这些类提供的功能

16.Object类

类层次结构的根类,所有类都直接或者间接的继承自该类

所以该类的非私有成员,所有的类都有

方法

public native int hashCode()

//返回该对象的哈希码值,默认情况下,该方法会根据对象的地址来计算(数字),不同对象的hashCode()一般来说不会相同,同一个对象的hashCode()值肯定相同

public final Class getClass()

//返回此Object的运行时类,常用于反射场景,Class类是用来描述类的属性,可以通过Class类中的public String getName(),获取对象的真实类的全名称

public String toString()

//返回的是对象的类名@16进制哈希值,即getClass().getName() + "@" + Integer.toHexString(hashCode()) ,这没什么意义,所以一般都会重写toString()

equals()

//指示其他某个对象是否与此对象相等,默认比较的是地址值,显然没什么意义,因此通常都会重写

==和equals()

==是一个比较运算符号

        既可以比较基本数据类型,也可以比较引用数据类型

        基本数据类型比较的是值,引用数据类型比较的是地址值

equals方法是一个方法

        只能比较引用数据类型

        如果没有重写Object类中的equals方法,equals()和==比较引用数据类型无区别

17.String类

注意

String类不能被继承,public final class String extends Object

字符串本身是常量

String str = "abc";
str = "def";		//此时,"abc"仍然是"abc",并没有改变,但是变成了无用的垃圾,是将"def"赋值	给了引用型变量str
"abc"是常量,一旦生成,值无法改变
str是String类型的引用型变量,它的值,即指向的地址,可以改变

构造方法

public String()

public String(byte[] bytes),将字节数组转为字符串,字节数组存的是byte类型,如97,转为a(根据平台默认字符集解码)

public String(byte[] bytes, int index, int length),字节数组一部分转为字符串,index从0开始,第三个参数是长度--与获取子串的方法区分

public String(char[] value),字符数组转为字符串

public String(char[] value, int index, int count),字符数组一部分转为字符串,index从0开始,第三个参数是字符数量

public String(String str),字符串常量转为字符串对象

char data[] = {'a','b'}; String str = new String(data) 相当于 String str = "ab"

String的最大长度

字符串的内容是由一个字符数组 char[] 来存储的,长度是int,理论上int的范围是2^31 -1

常量池规定length为u2,即两个字节,因此范围就变为了2^16- 1 = 65535

JVM限制范围为65534

String的底层存储结构

jdk8:char[]

jdk9:byte[],优化的原因:char是两字节,很多情况下一个字符只需要一个字节,比如字母,使用char浪费空间

字符串的常量池机制

字符串常量池:如果池子中没有该字符串就创建,池子中有就用已有的,不再创建

String str1 = "abc";	//在常量池中创建"abc"
String str2 = "abc";	//直接指向常量池中的"abc"
sop(str1 == str2);		//true	比较的是地址,相同
sop(str1.equals(str2));	//true	String类的equals()重写了,比较的是值

String str1 = "abc";	//在常量池中创建"abc"
String str2 = new String("abc");	//堆中new一个String对象,对象获取了常量池中的"abc"的副本
sop(str1 == str2);		//false	比较的是地址,不同,一个指向常量池,一个指向堆
sop(str1.equals(str2));	//true	String类的equals()重写了,比较的是值

String str1 = "abc";
String str2 = "a" + "b" + "c";
sop(str1 == str2);		//true	java常量优化机制,编译时会自动优化处理常量
sop(str1.equals(str2));	//true

String str1 = "ab";
String str2 = "abc";
String str3 = str1 +  "c";
sop(str3 == str2);		//false
sop(str3.equals(str2));	//true
String之间用+号串联是通过StringBuilder或StringBuffer类和append()方法+toString()方法实现的
所以这一步实际上所以相当于生成了一个StringBuffer对象,一个String 对象--堆内存,所以是false

String类的方法

String类的判断功能

equals() 判断值是否相等

equalsIgnoreCase() 忽略大小写判断值是否相等

contains() 判断大字符串是否包含小字符串

startsWith() 判断是否以某字符串开头

endsWith() 判断是否以某字符串结尾

isEmpty() 判断是否为空

String类的获取功能

int length() 获取长度

char charAt(int index) 获取index处的字符

int indexOf(int ch) ch第一次出现的索引

int indexOf(String str) str第一次出现的索引

int indexOf(int ch, int fromIndex) ch从指定位置开始第一次出现的索引

int indexOf(String str, int fromIndex) strch从指定位置开始第一次出现的索引

lastIndexOf()类似,从后往前检索(最后一次出现的索引)

String subString(int start)

String subString(int start, int end) //左闭右开区间

String类的转换功能

byte[] getBytes() //字符串转为字节数组,根据平台的编码集,GBK码表1个中文2个字节,特点:第一个字节肯定是负数

char[] toCharArray() //字符串转字符数组

static String valueOf(char[] chs) //字符数组转为字符串

注意:

String类的valueOf()可以将任意类型数据转为字符串,对象也可以,输出的是调用toString()方法的结果

同样的,其他类型转为String也有类似的方法

byte : Byte.parseByte(String s) : 将 s 转换成 byte

double : Double.parseDouble(String s) : 将 s 转换成 double

String类拼接

concat()

String类的其他功能

String replace(char/String old, new) //替换

trim() //去除两端空格

int compareTo(String str) //按位字典顺序比较,输出按码表值作差的值,相同的是0,长短不一致的,空格算作0

int compareToIgnoreCase(String str) //忽略大小写

18.Math类

用于执行基本数学运算,如初等指数、对数、平方根和三角函数,成员全部是静态的,所以构造方法私有

public static int abs(int a) //绝对值

public static double ceil(double a) //向大取整

public static double floor(double a) //向小取整

public static int max(int a,int b) //取大

public static double pow(double a,double b)//a的b次幂

public static double random() //0.0-1.0之间的随机小数(左闭右开)

public static int round(float a) //四舍五入

public static double sqrt(double a) //开平方

public static double random() //获取随机数,返回带正号的 double 值,该值大于等于 0.0 且小于 1.0

int number = (int)(Math.random()*100)+1; //获取一个1-100之间的随机数

19.Random类

用于产生随机数,产生的随机数由入参(种子)决定,如果用相同的种子创建两个 Random 实例,那么每次重新运行程序生成随机数,都会生成相同的一连串随机数

构造方法

public Random()

public Random(long seed)

成员方法

public int nextInt()

public int nextInt(int n) //给定上限,生成0到n之间的随机数(左闭右开)

20.System类

包含一些有用的类字段和方法,它不能被实例化

成员方法

public static void gc() //运行垃圾回收器

public static void exit(int status) //终止运行java虚拟机

public static long currentTimeMillis() //获取当前时间与1970.1.1之间的时间差(毫秒值),可以通过首尾获取两次currentTimeMillis()做差得到程序运行的时间

public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) //将src数组中srcPos开始的length长度复制到dest数组的destPos起始位置

垃圾回收机制

垃圾回收机制很复杂,此处只是简单描述垃圾回收的一些特点

1.无法人为控制,随机事件对随机垃圾对象进行回收

2.判断对象为垃圾的标准,没有任何引用(关联)

3.垃圾对象在被回收前会运行object类继承来的finalize()来解放内存以外的系统资源,此时垃圾对象会复苏,产生异常,但是虚拟机会进行忽略

4.触发主GC的条件,如何避免(核心是减少内存中的垃圾对象)

        1.不要显式System.gc(),虽然是建议,但一般都会运行

        2.循环中使用StringBuffer而不是直接操作String,减少内存中的对象

        3.能使用基本类型就不用包装类,减少内存中的对象

21.BigInteger类

可以让超过Integer范围内的数据进行运算

构造方法

public BigInteger(String val)

成员方法

public BigInteger add(BigInteger val) +

public BigInteger subtract(BigInteger val) -

public BigInteger multiply(BigInteger val) *

public BigInteger divide(BigInteger val) /

public BigInteger[] divideAndRemainder(BigInteger val) //数组中存商和模(余数)

22.BigDecimal类

由于在运算的时候,float类型和double很容易丢失精度,为了能精确的表示、计算浮点数,Java提供了BigDecimal

BigDecimal表示不可变的、任意精度的有符号十进制数

构造方法

public BigDecimal(String val)

成员方法

public BigDecimal add(BigDecimal augend)

public BigDecimal subtract(BigDecimal subtrahend)

public BigDecimal multiply(BigDecimal multiplicand)

public BigDecimal divide(BigDecimal divisor)

23.Date类

表示特定的瞬间,精确到毫秒

构造方法

public Date() //当前时刻

public Date(long date) //传参date意味着从标准时间(1970.1.1)以来指定date毫秒数的时刻,但要注意电脑本机设置的区时,比如传参0,对于东八区,显示的是8点

成员方法

public long getTime() //获取该时间对象对应的毫秒值(System.currentTimeMillis())

public void setTime(long time) //给对象设置毫秒值(距1970)

24.Calendar类

日历类,是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法

成员方法

public static Calendar getInstance() //获取默认的日历子类,当前时刻

public int get(int field) //传入对应字段,获取对应字段值

public void add(int field,int amount) //对指定字段进行加减操作

public final void set(int year,int month,int date) //设置指定字段的值或者默认顺序设置

25.SimpleDateFormat类

日期/时间格式化的抽象类,实现日期和字符串的相互转换

DateFormat是抽象类,所以使用其子类SimpleDateFormat

构造方法

public SimpleDateFormat()

public SimpleDateFormat(String pattern)

成员方法

public final String format(Date date)

public Date parse(String source)

自定义格式化

SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); sdf.format(new Date());

pattern的写法

26.Arrays类

针对数组进行操作的工具类,提供了排序,查找等功能

成员方法

public static String toString(int[] a) //转字符串

public static void sort(int[] a) //排序

public static int binarySearch(int[] a,int key) //二分查找

public static List asList(T... a)

        返回对象是一个Arrays内部类,并没有实现集合的修改方法,Arrays.asList 体现的是适配器模式

        因为集合中只能存引用型,所以,对于存储非引用型元素的数组,会将整个数组作为一个引用型变量转为集合

27.基本类型包装类

作用:将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据

常用操作:用于基本数据类型与字符串之间的转换

基本类型和包装类对应关系

byte 	Byte
short	Short
int	    Integer
long	Long
float	Float
double	Double
char	Character
boolean	Boolean

Integer类为例

Integer 类在对象中包装了一个基本类型 int 的值

构造方法

public Integer(int value)

public Integer(String s) //这里的String,只能是数字字符串,不能是"abc"之类的字符串

String和int类型的相互转换

int->String

public static String valueOf(int i) //String类提供

public static String toString(int i) //Integer类提供

String->int

public static int parseInt(String s) //Integer类提供,基本数据类型包装类中,只有char类型没有parseInt(String str)方法,char类型显然不能有这样的方法,只能有通过str.toCharArray()将字符串转为字符数组

Integer->int

intValue()

JDK5+自动装箱和拆箱

自动装箱:把基本类型转换为包装类类型,不再需要显式使用构造方法

自动拆箱:把包装类类型转换为基本类型,不再需要显式使用intValue()

这样一来,在执行运算时,Integer和int就没有任何区别了

注意事项:

1.在运算时,要保证Integer不为null

2.Integer / Integer,两个Integer类型相除,结果还是整数,不会是小数

Integer的常量池机制

-128--127是byte的取值范围,在这个范围内自动装箱不会新创建对象,而是从常量池内获取,因此这个范围内,自动装箱的对象Integer可以直接用==比较大小,相同大小获取的是同一个对象

但是超过这个范围,直接使用==比较大小,就一定会返回false,因为拿到的不是同一个对象,因此应该使用equals()比较,包装类已经重写了equals(),比较的是值,而不是地址

Integer i1 = new Integer(97);
Integer i2 = new Integer(97);
System.out.println(i1 == i2);
System.out.println(i1.equals(i2));
System.out.println("-----------");
//手动装箱,一定新建对象
//fasle
//true

Integer i3 = new Integer(197);
Integer i4 = new Integer(197);
System.out.println(i3 == i4);
System.out.println(i3.equals(i4));
System.out.println("-----------");
//false
//true

Integer i5 = 127;
Integer i6 = 127;
System.out.println(i5 == i6);
System.out.println(i5.equals(i6));
System.out.println("-----------");
//自动装箱,-128--127之间,同样大小不会新建对象
//true
//true

Integer i7 = 128;
Integer i8 = 128;
System.out.println(i7 == i8);
System.out.println(i7.equals(i8));

28.StringBuffer&StringBuilder

StringBuffer

线程安全的可变字符序列

StringBuffer和String的区别

String是一个不可变的字符序列

StringBuffer是一个可变的字符序列,底层是定长字符数组char[capacity],长度是int类型,理论上最大长度即为int的最大值,即2^31-1

构造方法

public StringBuffer() //默认生成容量为16个字符的字符缓冲区

public StringBuffer(int capacity) //可以指定容量

public StringBuffer(String str) //可以直接把String塞进缓冲区,此时容量为str.length() + 16,塞入其他StringBuffer,StringBuilder,String子类对象也可以

成员方法

sb.length() //容器中字符个数

sb.capacity() //容器容量

public StringBuffer append(String str) //可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身

public StringBuffer insert(int offset,String str) //在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身

public StringBuffer deleteCharAt(int index) //删除指定位置的字符,并返回本身

public StringBuffer delete(int start,int end) //删除从指定位置开始指定位置结束的内容,并返回本身

public StringBuffer replace(int start,int end,String str) //从start开始到end用str替换

public StringBuffer reverse() //字符串反转

public String substring(int start) //从指定位置截取到末尾

public String substring(int start,int end) //截取从指定位置开始到结束位置,包括开始位置,不包括结束位置

public char charAt(int index) //返回指定位置的char,返回的是基本数据类型char,不是包装类Character,不可以使用equals()去把String与char进行比较,那样一定是false,用 == 比较两个char

StringBuffer初始长度和扩容机制

初始长度:无参构造16,有参构造16+str.length()

扩容机制:扩容是新建数组+复制原数组数据+追加新内容

一次追加长度超过当前容量,则会按照 当前容量*2+2 扩容一次

一次追加长度不仅超过初始容量,而且按照 当前容量*2+2 扩容一次也不够,其容量会直接扩容到与所添加的字符串长度相等的长度

StringBuffer和String的相互转换

String->StringBuffer:通过StringBuffer的构造方法

StringBuffer->String:通过toString()方法

StringBuffer和StringBuilder

相同:都是AbstractStringBuilder的子类,用法几乎相同

区别:StringBuffer是jdk1提供,是线程安全的,效率低;StringBuilder是jdk5提供,是线程不安全的,效率高

String,StringBuffer&StringBuilder的区别

String是一个不可变的字符序列

StringBuffer&StringBuilder是可变的字符序列

String和StringBuffer分别作为参数传递:String作为参数传递,方法外的值不会改变;StringBuffer&StringBuilder进行append()后方法外的值会改变

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

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

相关文章

LeetCode算法题解(回溯、难点)|LeetCode332. 重新安排行程

LeetCode332. 重新安排行程 题目链接:332. 重新安排行程 题目描述: 给你一份航线列表 tickets ,其中 tickets[i] [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。 所有这些机票都属于一个从 JFK&#xff08…

【Orangepi Zero2 全志H616】驱动串口实现Tik Tok—VUI(语音交互)

一、编程实现语音和开发板通信 wiringpi库源码demo.c 二、基于前面串口的代码修改实现 uartTool.huartTool.cuartTest.c 三、ADB adb控制指令 四、手机接入Linux热拔插相关 a. 把手机接入开发板 b. 安装adb工具,在终端输入adb安装指令: sudo apt-g…

高能数造电池3D打印智能制造小试线,开启全固态电池数字化新时代

在科技创新的浪潮中,电池制造领域又迎来了一次突破性的进展。近日,高能数造(西安)技术有限公司重磅推出了其最新电池数字制造装备——全固态电池3D打印智能制造小试线 ,这一创新性的技术开启了全固态电池的数字化智造新时代,为全固…

Figma切图,轻松上手!

对于UI设计师来说,在设计网页或移动应用界面时,不仅需要考虑视觉效果和用户体验,还需要考虑实际开发过程中的实现。例如,与开发人员合作,将设计草案中的图片、图标、插图等元素转换为网页或移动应用程序的代码&#xf…

设计模式之发布订阅、观察者模式

一、观察者模式 观察者模式定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知,并自动更新 观察者模式属于行为型模式,行为型模式关注的是对象之间的通讯,观察者模式就…

如何在时间循环里最优决策——时间旅行者的最优决策

文章目录 每日一句正能量前言时间旅行和平行宇宙强化学习策略梯度算法代码案例推荐阅读赠书活动 每日一句正能量 做一个决定,并不难,难的是付诸行动,并且坚持到底。 前言 时间循环是一类热门的影视题材,其设定常常如下&#xff1…

结合element的el-tooltip实现文本溢出进行省略,鼠标移入显示全部

结合element的el-tooltip实现文本溢出进行省略&#xff0c;鼠标移入则显示全部。如果没有出现省略&#xff0c;鼠标移入则不进行浮出显示。 多简单的一个功能&#xff0c;搜了一下其它人写的&#xff0c;写的简直是一言难尽。 <!--* 轮子的作者: 轮子哥* Date: 2023-08-29…

STM32外设系列—MPU6050角度传感器

&#x1f380; 文章作者&#xff1a;二土电子 &#x1f338; 关注公众号获取更多资料&#xff01; &#x1f438; 期待大家一起学习交流&#xff01; 文章目录 一、MPU6050简介二、MPU6050寄存器简介2.1 PWR_MGMT_1寄存器2.2 GYRO_CONFIG寄存器2.3 ACCEL_CONFIG寄存器2.4 PW…

剑指JUC原理-17.CompletableFuture

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码&#x1f525;如果感觉博主的文章还不错的话&#xff0c;请&#x1f44d;三连支持&…

MySQL常用时间函数

1.NOW()&#xff1a;返回当前日期和时间。 SELECT NOW()2.CURDATE()&#xff1a;返回当前日期。 SELECT CURDATE();3.CURTIME()&#xff1a;返回当前时间。 SELECT CURTIME();4.DATE()&#xff1a;提取日期或日期时间表达式的日期部分。 SELECT DATE(NOW());5.TIME()&#…

深度学习(生成式模型)——Classifier Guidance Diffusion

文章目录 前言问题建模条件扩散模型的前向过程条件扩散模型的反向过程条件扩散模型的训练目标 前言 几乎所有的生成式模型&#xff0c;发展到后期都需要引入"控制"的概念&#xff0c;可控制的生成式模型才能更好应用于实际场景。本文将总结《Diffusion Models Beat …

Rust和isahc库编写代码示例

Rust和isahc库编写的图像爬虫程序的代码&#xff1a; rust use isahc::{Client, Response}; fn main() { let client Client::new() .with_proxy("") .finish(); let url ""; let response client.get(url) .send() …

各大电商平台关于预制菜品种酸菜鱼销售量

# 导入需要的包 library(rvest) # 用于网页抓取 library(tidyverse) # 用于数据处理 library(stringr) # 用于字符串处理# 设置代理信息 proxy_host <- "www.duoip.cn" proxy_port <- 8000# 设置要爬取的网页 url <- "https://jshk.com.cn/products/sa…

力扣每日一题 ---- 2905. 找出满足差值条件的下标 II

这道题带有绝对值差的题&#xff0c;一看就是双指针的题&#xff0c;并且还带有两个限制&#xff0c;那么我们的做法就是 固定一个条件&#xff0c;维护一个条件 本题还用到了一个贪心思路&#xff0c;会介绍到 那我们怎么固定一个条件&#xff0c;维护一个条件&#xff1f; …

护眼灯买什么样的好?好用又实惠的护眼台灯推荐

护眼台灯的光照一般比较均匀&#xff0c;相比普通台灯&#xff0c;一般具有防蓝光、防频闪等功能&#xff0c;能够提供一个健康舒适的学习、生活灯光环境&#xff0c;建议选购内置智能感光模式的护眼台灯&#xff0c;以确保灯光亮度一直处于均衡状态&#xff0c;让眼睛更轻松。…

QQ怎么恢复照片?教你3个恢复方法!

QQ支持多样化的通讯方式&#xff0c;无论是文字、语音、视频通话还是文件传输&#xff0c;都可以通过QQ来实现。在工作或者学习时使用QQ&#xff0c;大大提高了沟通的效率和便利性。 然而&#xff0c;我们在使用QQ时可能会遇到各种问题&#xff0c;其中之一就是如何恢复删除的…

看李广的故事:发现团队管理之道

在漠北之战中&#xff0c;李广因迷失道路而延误了军期。因李广年事已高&#xff0c;无法承受幕府的责难&#xff0c;最终选择在军前自刎而死。 这一事件令人痛惜&#xff0c;不禁让人想起在工作中遇到的类似情况。有些同事因为突然离职&#xff0c;让领导感到愕然&#xff0c;…

基于Quartz实现动态定时任务

生命无罪&#xff0c;健康万岁&#xff0c;我是laity。 我曾七次鄙视自己的灵魂&#xff1a; 第一次&#xff0c;当它本可进取时&#xff0c;却故作谦卑&#xff1b; 第二次&#xff0c;当它在空虚时&#xff0c;用爱欲来填充&#xff1b; 第三次&#xff0c;在困难和容易之…

汽车之家车型_车系_配置参数数据抓取

// 导入所需的库 #include <iostream> #include <fstream> #include <string> #include <curl/curl.h> #include <regex>// 声明全局变量 std::string htmlContent; std::regex carModelRegex("\\d{4}-\\d{2}-\\d{2}"); std::regex ca…

LVS NAT 模式

1.3.2. LVS DR 模式 模式&#xff08;局域网改写 &#xff08;局域网改写 mac 地址&#xff09; ①.客户端将请求发往前端的负载均衡器&#xff0c;请求报文源地址是 CIP&#xff0c;目标地址为 VIP。 ②.负载均衡器收到报文后&#xff0c;发现请求的是在规则里面存在的地址&am…