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

目录

1 String字符串

2 数组


1 String字符串

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

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

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

推荐使用第一种

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

1.2 String字符串常见面试题

  

 

 1.3 常用API:

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 数组的初始化

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

静态初始化的格式如下:

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

动态初始化的格式如下: 

⚠  定义数组时长度可以是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 数组的底层原理    

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

        数组中的所有元素都对应着一个索引,以后再看到索引就应该知道索引都是从零开始的,当我们想要访问数组元素的时候就可以使用以下方式来访问。

数组名[索引]

还可以使用以下格式获取数组的长度

数组名.length

数组的遍历

 2.4 多维数组

        多维数组就是数组作为数组的元素进行存储,常见的多维数组形式是二维数组,其他多维数组参考二维数组。二维数组就是一维数组作为数组的元素进行存储的形式,可以借助表格的概念帮助理解二维数组,借行列的概念理解二维。

二维数组的静态初始化定义

 二维数组的定义可以不指定数组的列数但是不能不指定数组的行数,除了以上四种二维数组的定义和初始化,还有下面两种初始化格式但是并不推荐使用,除此之外其他都是错误的。

二维数组的底层原理图

二维数组元素的访问

数组名[行索引][列索引] 

比如说,有一个3行4列名为nums的二维数组[[1,2,3,4],[5,6,7,8],[9,10,11,12]],nums[2][3]访问的就是行索引为2列索引为3的元素==>值为12。索引是从0开始的!nums[2]访问的就是行索引是2的元素,因为二维数组是数组下面存数组,故返回的是一个一维数组的地址值。

二维数组的长度

数组名.length

⚠  通过以上形式获取到的长度是二维数组的行数,而数组名[行索引].length获取到的是数组在该索引行的列数

二维数组的遍历

 二维数组的默认初始化值

二维数组的定义方式不同默认初始化值也不同

        如果定义语句为int[ ][ ] num = new int[3][2];的话,num[行索引][列索引]的输出为0,num[行索引]的输出是相应的地址值;

        如果定义语句是int[ ][ ] num = new int[3][ ];的话,num[行索引][列索引]的输出为0,num[行索引]的输出是null。

2.5 Arrays工具类

上一篇:

下一篇:

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

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

相关文章

【Java从入门到头秃专栏 8】语法篇(七) :反射 动态代理 注解

目录 1 反射机制 2 反射的应用:动态代理 3 注解 1 反射机制 反射机制(Reflect Machanism),是指在程序运行期间借助Reflect API获取任何类的内部信息,并能直接操作对象的内部属性以及方法,Java本身而言是静态语言但是由于Java反…

【SSM面向CRUD编程专栏 1】Spring简介 xml配置文件 依赖注入 数据注入

🛫更多ssm知识见SSM_面向CRUD编程专栏 🚕本博客总结自黑马程序员的ssm框架视频 🚒博主对于该知识尚在学习阶段 🚄如果发现存在问题请毫不吝啬的指出 🚀🚀扎哇太枣糕的博客主页🚀🚀 目…

【SSM面向CRUD编程专栏 2】Spring相关API 数据源(连接池)的配置 注解开发 整合junit

🛫更多ssm知识见SSM_面向CRUD编程专栏 🚕本博客总结自黑马程序员的ssm框架视频 🚒博主对于该知识尚在学习阶段 🚄如果发现存在问题请毫不吝啬的指出 🚀🚀扎哇太枣糕的博客主页🚀🚀 目…

【SSM面向CRUD编程专栏 4】 Spring集成web环境 SpringMVC初识

🛫更多ssm知识见SSM_面向CRUD编程专栏 🚕本博客总结自黑马程序员的ssm框架视频 🚒博主对于该知识尚在学习阶段 🚄如果发现存在问题请毫不吝啬的指出 🚀🚀扎哇太枣糕的博客主页🚀🚀 ​…

IntelliJ IDEA里的项目搞崩了怎么办,本地历史版本回退拯救你崩溃的心灵

💥写在前面: 如果你还没有读过雨果的悲惨世界也没有读过余华的活着,那你可以看看我今天早上的经历,如果不想听我胡侃的话,直接进入正题: 目录 本地历史的强大 今天早上打开IntelliJ IDEA继续ssm模块的代码练…

【SSM面向CRUD编程专栏 5】使用SpringMVC进行数据响应以及获取请求数据

🛫更多ssm知识见SSM_面向CRUD编程专栏 🚕本博客总结自黑马程序员的ssm框架视频 🚒博主对于该知识尚在学习阶段 🚄如果发现存在问题请毫不吝啬的指出 🚀🚀扎哇太枣糕的博客主页🚀🚀 目…

【SSM面向CRUD编程专栏 6】springMVC拦截器、异常处理 jdbcTemplate

🛫更多ssm知识见SSM_面向CRUD编程专栏 🚕本博客总结自黑马程序员的ssm框架视频 🚒博主对于该知识尚在学习阶段 🚄如果发现存在问题请毫不吝啬的指出 🚀🚀扎哇太枣糕的博客主页🚀🚀 目…

【SSM面向CRUD编程专栏 7】springAop 事务控制

🛫更多ssm知识见SSM_面向CRUD编程专栏 🚕本博客总结自黑马程序员的ssm框架视频 🚒博主对于该知识尚在学习阶段 🚄如果发现存在问题请毫不吝啬的指出 🚀🚀扎哇太枣糕的博客主页🚀🚀 目…

【SSM面向CRUD编程专栏 8】一篇博客快速上手使用MyBatis进行CRUD

🛫更多ssm知识见SSM_面向CRUD编程专栏 🚕本博客总结自黑马程序员的ssm框架视频 🚒博主对于该知识尚在学习阶段 🚄如果发现存在问题请毫不吝啬的指出 🚀🚀扎哇太枣糕的博客主页🚀🚀 目…

【SSM面向CRUD编程专栏 9】SSM框架整合

🛫更多ssm知识见SSM_面向CRUD编程专栏 🚕本博客总结自黑马程序员的ssm框架视频 🚒博主对于该知识尚在学习阶段 🚄如果发现存在问题请毫不吝啬的指出 🚀🚀扎哇太枣糕的博客主页🚀🚀 目…

三万字速通SSM框架入门知识点,快速上手CRUD

🛫更多ssm知识见SSM_面向CRUD编程专栏 🚕本博客总结自黑马程序员的ssm框架视频 🚒博主对于该知识尚在学习阶段 🚄如果发现存在问题请毫不吝啬的指出 🚀🚀扎哇太枣糕的博客主页🚀🚀 目…

无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core]

问题简介 本人是在进行一个ssm框架项目的编写的时候,在数据库中查询到所有的商品信息并返回到页面使用EL表达式进行展现,但是使用tomcat 9.0.58运行的时候报错会出现以下报错情况。 页面报错: 控制台报错: 解决方法 首先看看是不…

check the manual that corresponds to your MySQL server version for the right syntax to use near

首先判断自己是在什么情况下报的错,如果是MyBatis的SQL报错的话,建议直接点击目录跳转到MyBatis时SQL报错,避免浪费时间。如果本文能够对你有所帮助的话,还请在评论区多多支持 目录 🍻运行SQL语句、SQL文件等报错 &…

MyBatis的逆向工程工具,自动生成数据库对应的POJO实体类、mapper接口、增删改查mapper.xml文件

下载MyBatis的逆向工程工具,并解压缩到一个不包含中文字符的文件夹下,我直接放到了D盘下,下载地址:MyBatis逆向工程工具下载 如何使用MyBatis的逆向工程工具 下载之后使用idea在一个新窗口中打开,选中工具文件之后&am…

『收藏向 期末SSM课设救急』 教你从搭建到测试运行手撸一个SSM项目实战,附带源码,前端页面、解析和一般遇到的问题(排雷)

🛫ssm知识学习见SSM_面向CRUD编程专栏 🚕本项目来自动力节点的【米米商城】 🚒博主对于该知识尚在学习阶段 🚄如果发现存在问题请毫不吝啬的指出 🚀🚀扎哇太枣糕的博客主页🚀🚀 项目…

【SpringBoot 2】(一)基础知识了解学习

🛫更多知识总结见SpringBoot 2专栏 🚕本篇知识点总结自尚硅谷雷神的视频 🚒博主对于该知识尚在学习阶段 🚄如果发现存在问题请毫不吝啬的指出 🚀🚀扎哇太枣糕的博客主页🚀🚀 ​ 目录…

【SpringBoot 2】(二)快速入门案例HelloWorld

🛫更多知识总结见SpringBoot 2专栏 ( 🚕本篇知识点总结自尚硅谷雷神的视频 🚒博主对于该知识尚在学习阶段 🚄如果发现存在问题请毫不吝啬的指出 🚀🚀扎哇太枣糕的博客主页🚀🚀 ​ 目…

【SpringBoot 2】(三)SpringBoot相较于Spring的特点

🛫更多知识总结见SpringBoot 2专栏 🚕本篇知识点总结自尚硅谷雷神的视频 🚒博主对于该知识尚在学习阶段 🚄如果发现存在问题请毫不吝啬的指出 🚀🚀扎哇太枣糕的博客主页🚀🚀 ​ 目录…

井通swtc能不能涨到2元_买一支2块到3块之间的股票,买几十万股吗?这样操作效果怎么样?...

有很多新股民有一种看法,认为高价股风险很大,那么可不可以买2到3元的低价股,是不是风险就很小,以后上涨的力度就会很大?这是很多股民都存在的一个误区,也是很多股市的所谓高手的误导,他们说&…

cad应用程序的组件中发生了未经处理的异常_什么是CAD/CAM?

与许多其他行业一样,牙科技术的生产阶段也越来越自动化。由于牙科实验室工作的价格已成为治疗计划和治疗的主要因素,因此自动化可以在西欧和美国等高薪地区实现更具竞争力的生产。现在,计算机技术的进步使高性价比的单件生产成为可能。近年来…