2022-07-20 第4组 蒋萍 面向对象(3)String和封装类
面向对象(3)
一、String
是一个类
String str = "这是String类的对象";
// 类要创建对象要new,但为啥在String上不用new,就可以把这个str称为对象
String str2 = new String("这是String类的对象");
// String类的对象,创建对象要调用构造器
//str和str2指向的对象不在同一区域
// == 比较的是对象在内存中的存储位置
System.out.println(str == str2); // false
String str3 = new String("这是String类的对象");
System.out.println(str2 == str3); // false
// 只要new就是开辟了新空间地址
String str4 = "这是String类的对象";
System.out.println(str == str4); // true
-
== :比较区地址
上面的例子中:
-
等号赋值,不管怎么比较都是
true
, -
new
赋值,用双等号比较就是false
;
1.1 String 的不变性
String
一旦声明,不可更改(内存级别来说)
1.2 String常用方法
(至少掌握15个)
Scanner scanner = new Scanner(System.in);
- 键盘输入的赋值方式也是使用的new方式(只要不是自己写的,那就是new出来的)但都是对象
是对象就可以调方法
1.2.1 equals()
public boolean equals(Object obj)
-== 比较的是内容==
-
参数:传入的参数是
String
型 -
返回值:
boolean
-
访问权限:
public
1.2.2 length()
public int length()
-
获取字符串长度(字符个数)
-
参数:不需要传参
-
返回值:
int
-
访问权限:
public
1.2.3 charAt()
public char charAt(int index)
- 取出指定下标位置的字符(也有越界异常
StringIndexOutOfBoundsException
)
1.2.3 indexOf()
-
判断指定字符是否存在,返回的是下标
-
参数:int 、char……
-
返回值:返回字符串中从左到右遇到的第一的下标,如果不存在,返回 -1
indexOf(String,int)
,从int位置开始查找,包括当前位置
1.2.3 substring()
-
原始数据不会被改变
-
包含起始位置,不包含终止位置(左闭右开)
下面所有方法返回的都是一个新的字符串
转大写:toUpperCase()
转小写:tolowerCase()
判断是否以……开头:startswith(),一个参数是字符串
判断是否以……结尾:endswith()
忽略大小写,比较内容:equalsIgnoreCase()-----> 验证码
去掉字符串前后的空格:trim()
根据指定字符分割:split(String regex),返回值是数组
…………
1.3 字符串和其他数据类型的转换
1.3.1 字符串和int型转换
1、不推荐使用~
int i = 10;
String s = i + "";
// 任何数据类型和字符串类型做加法,结果都是字符串
System.out.println(s);
2、String.valueOf()
,推荐使用
1.3.2 字符串转换为数组
转成字符型数组:toCharArray()
- 数组:一种线性表的数据结构(不要说它是不是类)
// 转成字符型数组
String str = "adsda";
char[] arr = str.toCharArray();
for (char c : arr) {
System.out.println(c);
}
转成字节型数组:getBytes()
// 转成字节型数组
String str = "adsda";
byte[] arr = str.getBytes();
for (byte c : arr) {
System.out.println(c);
}
// 一般情况下,字节型数组用在文件操作
二、封装类
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
2.1 为什么出现??
封装类——> 引用数据类型——> 初始值:null 而不是0
基本数据类型的默认初始值为0 ,所以不推荐使用基本数据类型
2.2 举例
Integer i = 20;
package com.jr.object.july20;
public class Change {
public static void main(String[] args) {
Integer i = 20;
// 原理:把int型包装成了包装器Integer类型
//把基本数据类型转换成对应的包装器类型
int i1 = i;//拆箱:包装器类型转换成本数据类型
// JDk5之后才出现的
// JDK之前:
Integer i2 = 20;
Integer i22 = Integer.valueOf(50); // 装箱
int i222 = i22.intValue();// 拆箱
// 任何数据类型和字符串类型做加法,结果都是字符串
System.out.println();
}
}
2.3 原理
-
装箱:把基本数据类型转换成对应的包装器类型
-
拆箱:包装器类型转换成本数据类型
三、其他
1、字符串获取长度,和数组获取长度有啥区别 ????
没有可比性!!!
-
数组的
length
是属性 -
字符串的
length()
是方法
2、统计字符出现次数
/*
第一种
*/
for (int i = 0; i < s1.length(); i++) {
if(s1.charAt(i) == target){
count++;
}
}
System.out.println(target + "在" + s1 + "中出现了" + count + "次!");
/*
第二种
*/
int i = 0;
while(i < str.length()) {
int i1 = str.indexOf(target,i);
if(i1 != -1){
count++;
i = i1 + 1;
} else {
i++;
}
}
return count;
3、JDK5之后新增的
1、自动拆装箱
2、增强for
循环(foreach)
3、枚举
4、JDK7新增
1、switch……case 可以使用String
型数据
5、异常
1、数组下标越界
2、内存溢出
3、字符串下标越界
4、空指针
5、数据格式异常NumberFormatException
:
String s = "PPPP";
Integer i = Integer.parseInt(s);// 自动装箱
System.out.println(324-454);
总结
重点:String、包装类
今天感觉有点累,还困,呜呜呜……
熟练程度:70%
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY