【Java从入门到头秃专栏 4】语法篇(三) :字符串 数组(一)

简介: 【Java从入门到头秃专栏 4】语法篇(三) :字符串 数组(一)

1 String字符串

       Java没有内置的字符串类型,而是在Java类库中提供了一个预定义类--String。 在Java中把每一个使用双引号括起来的字符串都看做是String类的一个实例化对象。


       String常被称作是不可变字符串类型,那么有人就有疑问了,我定义的字符串变量的值可以改变啊,原因是String的不可变在于:以""方式给出来的字符串对象在字符串常量池中存储,你定义的字符串变量存储的是地址值指向字符串对象,你看到字符串变量的值改变了是因为字符串变量存储的地址值变了,但是字符串对象的值一直在字符串变量池中无法改变。

image.png



1.1 字符串对象的两种创建方式

推荐使用第一种

image.png



⚠  两种方式的区别:第一种方式产生的字符串对象会在字符串常量池中存储,且相同的内容只会在其中存储一份。第二种方式产生的字符串对象会放在堆内存中,创建几次就有几个字符串对象。

image.png

1.2 String字符串常见面试题

image.png

image.png


 image.png



1.3 常用API:


image.png


1.4 字符串判等


       字符串的值判等要用equals方法:字符串1.equals(字符串2),前面讲过,字符串变量存储的是字符串对象的地址,如果简单地使用 == 进行判等的话比对的是两个字符串对象的地址值,有时候虽然两个字符串的值相等,但是对象的地址值却不一样,返回的结果就与我们所期望的值判等结果所不一样


1.5 空字符串和Null串


       空字符串是""是长度为0的字符串,而Null串是变量值为null的String类型字符串变量。空字符串归根结底也是一个字符串对象,但是Null串只是一个变量(还未与对象进行关联的变量)。有时候在对一个字符串进行调用String字符串API的时候会报错,原因就是Null串无法调用那些API,而空串调用API的意义也不大,所以说应该使用if (str != null && str.length() != 0)判断一下。


2 数组

       数组就是用来存储一批同种类型数据的内存区域(可以借容器的概念方便理解),如果使用变量定义存储很多相同类型且可以分为一组的数据,会很繁琐,此时使用数组简便了代码的书写。


2.1 数组的初始化


       数组的初始化分为静态初始化和动态初始化,静态初始化就是在数组定义的时候就直接给数组赋值,动态初始化就是先定义一个数组再初始化。


静态初始化的格式如下:image.png


以上两种静态初始化的效果相同,但是一般实际开发中更喜欢使用第二种简便写法


动态初始化的格式如下:

image.png



⚠  定义数组时长度可以是0,长度为0的数组≠元素为null的数组


⚠  数组定义完成之后,在未进行赋值之前所有的元素会按照数据类型默认初始化为相应的值,整型:byte、short、int、long会初始化为0;字符型:char也初始化为0,只不过是0的字符形式计算机表示出来会乱码;浮点型:float、double会初始化为0.0;布尔型:boolean会初始化为false;其他引用数据类型:String、类、接口、数组……会初始化为null


⚠  使用数组名 = null的形式对数组变量进行赋值之后,可以使用数组名输出结果为null,但是使用数组名.length或者是数组名[索引]等方式时会抛NullPointerException (空指针异常)


⚠  数组一旦定义出来,它的类型和长度就固定好了,若是存放其他类型的元素会在编译时就无法通过,若是访问长度以外的元素会抛IArrayIndexOutOfBoundsException (数组索引越界异常)。 但是数组中的元素值并不固定,可以使用赋值的形式对数组中的元素进行改变。


2.2 数组的底层原理    

       数组初始化的时候在内存中创建一块地址连续的区域(又叫创建一个数组对象)用于存储元素,又创建一个数组变量底层存储了数组对象的地址信息,数组通过地址去引用数组对象,故称数组是一种引用数据类型。

image.png

相关文章
|
2天前
|
传感器 数据采集 网络协议
Java串口通信:从十六进制字符串到字节数组的正确转换与发送
Java串口通信:从十六进制字符串到字节数组的正确转换与发送
17 4
|
4天前
|
设计模式 算法 安全
Java多线程编程实战:从入门到精通
【4月更文挑战第30天】本文介绍了Java多线程编程的基础,包括线程概念、创建线程(继承`Thread`或实现`Runnable`)、线程生命周期。还讨论了线程同步与锁(同步代码块、`ReentrantLock`)、线程间通信(等待/通知、并发集合)以及实战技巧,如使用线程池、线程安全设计模式和避免死锁。性能优化方面,建议减少锁粒度和使用非阻塞算法。理解这些概念和技术对于编写高效、可靠的多线程程序至关重要。
|
4天前
|
Java
在Java中,如何将字符串转换为浮点数?
【4月更文挑战第30天】在Java中,如何将字符串转换为浮点数?
9 0
|
5天前
|
存储 Java 索引
Java数组
Java数组
13 0
|
5天前
|
存储 算法 Java
【Java探索之旅】掌握数组操作,轻松应对编程挑战
【Java探索之旅】掌握数组操作,轻松应对编程挑战
9 0
|
5天前
|
存储 Java C语言
【Java探索之旅】基本类型与引用类型 数组的应用 二维数组
【Java探索之旅】基本类型与引用类型 数组的应用 二维数组
10 0
|
5天前
|
存储 机器学习/深度学习 Java
【Java探索之旅】数组使用 初探JVM内存布局
【Java探索之旅】数组使用 初探JVM内存布局
14 0
|
5天前
|
存储 Java 编译器
【Java探索之旅】数组概念与初始化指南:动静结合
【Java探索之旅】数组概念与初始化指南:动静结合
13 0
|
5天前
|
存储 Java C语言
【Java探索之旅】数据类型与变量 浮点型,字符型,布尔型,字符串型
【Java探索之旅】数据类型与变量 浮点型,字符型,布尔型,字符串型
13 0
|
4月前
|
前端开发 Java
java前端:删除数组中指定元素的方法
java前端:删除数组中指定元素的方法