【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工具类
上一篇:
下一篇:
【Java从入门到头秃专栏 4】语法篇(三) :字符串 数组相关推荐
- 【Java从入门到头秃专栏 】(三) 控制流程 Math Date DateFormat Calendar System BigDecimal Random
目录 1 控制流程 2 Math类 3 Date类 4 DateFormat类 5 Calendar类(日历类) 6 System类 7 BigDecimal类 8 Random类(随机数) 1 控制 ...
- 【Java从入门到头秃专栏 8】语法篇(七) :反射 动态代理 注解
目录 1 反射机制 2 反射的应用:动态代理 3 注解 1 反射机制 反射机制(Reflect Machanism),是指在程序运行期间借助Reflect API获取任何类的内部信息,并能直接操作对象 ...
- 【Java从入门到头秃专栏 7】语法篇(六) :Lambda表达式(->) 方法引用(::) stream流
目录 1 Lambda表达式( -> ) 2 方法引用( :: ) 3 Stream流 接下来介绍的三种语法叫:Lambda表达式 方法引用 stream流,这三种语法的使用要有特定条件,在 ...
- 【Java从入门到头秃专栏 6】语法篇(五) :多线程 线程池 可见、原子性 并发包 Lambda表达式
目录 1 多线程 1.1 基本概念 1.2 创建线程的三种方式 1.4 解决线程安全问题的三种方法 1.5 线程通信 1.6 线程状态 2 线程池 2.1线程池的概念 2.2 创建并提交任务 3 可见 ...
- 【Java从入门到头秃专栏 】(一)学在Java语法之前
目录 1 初识Java 2 Java环境JDK 3 Java规范 1 初识Java Java是美国的sun(Stanford University Network)公司在1995年推出的一门计算机高级 ...
- 【Java从入门到头秃专栏 】(二) 注释 数据类型 变量 常量 关键字 标识符 运算符 输入输出
目录 1 注释 2 数据类型 3 变量与常量 4 关键字.标识符 5 运算符 6 键入值.输出值 1 注释 注释就是写在程序中对代码进行解释说明的文字,方便自己和其他人查看,以便大家更加容易理解程序. ...
- 人类高质量Java基础面试题大全,又是一篇三万字的总结!
点击主页访问更多精彩文章:https://blog.csdn.net/weixin_45692705?spm=1001.2101.3001.5343 Java基础面试题目录 共勉 ! Java概述 1 ...
- java英文字母排序_Java编程实现中英混合字符串数组按首字母排序的方法
在Java中对于字符串数组的排序,我们可以使用Arrays.sort(String[])方法很便捷的进行排序.例如: 输出的结果为:"gyu sdf zf 大同 的人 地方 反对 ...
- java中英文混合排序_Java编程实现中英混合字符串数组按首字母排序的方法
本文实例讲述了Java编程实现中英混合字符串数组按首字母排序的方法.分享给大家供大家参考,具体如下: 在Java中对于字符串数组的排序,我们可以使用Arrays.sort(String[])方法很便捷 ...
最新文章
- NET130署名错误一事,改正也着实迅速
- hive优化之------控制hive任务中的map数和reduce数
- Oracle Data Guard 主库 归档文件 删除策略 .
- 吴恩达机器学习Week4神经网络表述
- android com.squareup,android – 无法导入com.squareup.okhttp.OkHttpClient;
- 斗地主AI算法——第六章の牌型判断
- 23_触发器_库存与订单实战
- Windows 系统软件有哪些「必备」软件?
- Java七大设计模式原则(附相关电子图书下载)
- php 进销存 源代码_PHP 进销存源码
- php简单的注册登录页面模板,注册登录页面模板(示例代码)
- c语言if语句知识点总结,c语言中if语句知识点总结
- 计算机圆半径计算公式,圆半径计算公式是什么?
- 衡水中学2021年的高考成绩查询,2021衡水市地区高考成绩排名查询,衡水市高考各高中成绩喜报榜单...
- 例题 - 最近公共祖先 - 离线算法
- 【​观察】从移动计算当道 看高通“高举高打”背后的势能
- MISC机制编写字符驱动程序
- CEF 、chromium源码下载前相关代理配置
- Value cannot be null. (Parameter ‘connectionString‘)
- 10款超实用的程序员工具,工具用得好,头发掉的少
热门文章
- (作者:无名`)svn提交代码到本地仓库
- linux自带浏览器如何更新,在deepin上安装edge浏览器后更新系统报错的解决方案
- oracle修改窗口字体大小,jQuery之字体大小的设置方法
- mysql怎么分组查询所有数据库_Mysql-4 分组查询与子查询
- gin 静态文件服务器拒绝,nginx实现简单的图片服务器(windows)+静态文件服务器-Go语言中文社区...
- matlab 转换图片格式,Matlab实现图片格式转换 pgm转jpg等
- mysql 不指定 长度吗_mysql中整数类型后面的数字,是不是指定这个字段的长度?比如int(11),11代表11个字节吗?...
- mysql 组内排序_mysql组内排序取最大值
- 地图 插件 html 经纬度,如何往地图位置(经纬度)选择插件页面传递经纬度
- android datepicker 自定义,android – 如何使用两个datepicker创建自定义对话框?