【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

相关文章
|
11天前
|
Java
Java 数组学习笔记
本文整理Java数组常用操作:遍历、求和、查找、最值及二维数组行求和等典型练习,涵盖静态初始化、元素翻倍、去极值求平均等实例,帮助掌握数组基础与应用。
|
11天前
|
存储 SQL NoSQL
Redis-常用语法以及java互联实践案例
本文详细介绍了Redis的数据结构、常用命令及其Java客户端的使用,涵盖String、Hash、List、Set、SortedSet等数据类型及操作,同时提供了Jedis和Spring Boot Data Redis的实战示例,帮助开发者快速掌握Redis在实际项目中的应用。
154 1
Redis-常用语法以及java互联实践案例
|
11天前
|
Java API 数据库
2025 年最新 Java 实操学习路线,从入门到高级应用详细指南
2025年Java最新实操学习路线,涵盖从环境搭建到微服务、容器化部署的全流程实战内容,助你掌握Java 21核心特性、Spring Boot 3.2开发、云原生与微服务架构,提升企业级项目开发能力,适合从入门到高级应用的学习需求。
223 0
|
20天前
|
前端开发 Java 数据库连接
帮助新手快速上手的 JAVA 学习路线最详细版涵盖从入门到进阶的 JAVA 学习路线
本Java学习路线涵盖从基础语法、面向对象、异常处理到高级框架、微服务、JVM调优等内容,适合新手入门到进阶,助力掌握企业级开发技能,快速成为合格Java开发者。
261 3
|
21天前
|
监控 Java API
2025 年全新出炉的 Java 学习路线:从入门起步到实操精通的详细指南
2025年Java学习路线与实操指南,涵盖Java 21核心特性、虚拟线程、Spring Boot 3、微服务、Spring Security、容器化部署等前沿技术,助你从入门到企业级开发进阶。
179 0
|
1月前
|
NoSQL Java 关系型数据库
Java 从入门到进阶完整学习路线图规划与实战开发最佳实践指南
本文为Java开发者提供从入门到进阶的完整学习路线图,涵盖基础语法、面向对象、数据结构与算法、并发编程、JVM调优、主流框架(如Spring Boot)、数据库操作(MySQL、Redis)、微服务架构及云原生开发等内容,并结合实战案例与最佳实践,助力高效掌握Java核心技术。
215 1
|
1月前
|
Java 测试技术 API
Java IO流(二):文件操作与NIO入门
本文详解Java NIO与传统IO的区别与优势,涵盖Path、Files类、Channel、Buffer、Selector等核心概念,深入讲解文件操作、目录遍历、NIO实战及性能优化技巧,适合处理大文件与高并发场景,助力高效IO编程与面试准备。
|
1月前
|
Java 编译器 API
Java Lambda表达式与函数式编程入门
Lambda表达式是Java 8引入的重要特性,简化了函数式编程的实现方式。它通过简洁的语法替代传统的匿名内部类,使代码更清晰、易读。本文深入讲解Lambda表达式的基本语法、函数式接口、方法引用等核心概念,并结合集合操作、线程处理、事件回调等实战案例,帮助开发者掌握现代Java编程技巧。同时,还解析了面试中高频出现的相关问题,助你深入理解其原理与应用场景。
|
1月前
|
存储 缓存 Java
Java数组全解析:一维、多维与内存模型
本文深入解析Java数组的内存布局与操作技巧,涵盖一维及多维数组的声明、初始化、内存模型,以及数组常见陷阱和性能优化。通过图文结合的方式帮助开发者彻底理解数组本质,并提供Arrays工具类的实用方法与面试高频问题解析,助你掌握数组核心知识,避免常见错误。