Java基础学习
一 字符串
1.1 API 与 API文档
定义:
API就是应用程序编程接口
⇒ 指的就是JDK中提供的各种功能的Java类- 这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可。
1.1.1 如何使用帮助文档查找想要导用的方法
-
打开API帮助文档
-
点击显示,并找到索引下面的输入
-
在输入框中输入类名并点击显示
-
查看类所在的包
-
查看类的描述
-
查看构造方法
-
查看成员方法
1.2 String 概述
打开API帮助文档点击显示,并找到索引下面的输入在输入框中输入类名并点击显示查看类所在的包查看类的描述查看构造方法查看成员方法
String 是属于java.lang包中,会自动加载,所以在用的时候不需要导包
字符串不可改变,他们在创建的后不能被改变
1.3 创建String对象的两种方式
第一种
String name = "爱哦苏"
第二种
//空参构造 创建了一个空参 ⇒ ""
String s2 = new String();
//传递一个字符串,根据传递的字符串,再创建一个新的字符串对象
String s3 = new String("asoud");
//传递一个字符串数组,根据字符串的内容在创建一个新的字符串对象
//运用场景:修改字符串的内容,通过将其转变为数组,改变其想改变的元素,在转换为字符串就可以达到改变字符串的效果
char[] chs = {"a","b","c"};
String s4 = new String(chs); //==> abc
//传递一个字节数组,根据字节数组的内容在创建一个新的字符串对象
//运用场景:以后网络中都是通过数据的形式进行传输字节信息
//一般要把字节数字转化为字符串进行运用,所以就要用这个构造
byte[] bte = {98,99,100,101};
String s5 = new string{bte};//bcde
注意:(用第一个方法,直接创建的字符串)
当使用双引号直接赋值时,系统会检查该字符串在串池中是否存在不存在:创建新的存在:复用
注意 :(用第二个方法创建的字符串)
他所创建出来的字符串不会进行寻找,若有一样的字符串,他依然会创建一个新的空间去存储字符串,所以这种会浪费空间
1.4 Java常用字符串方法
1.4.1 比较
==号比较的是什么
- 基本数据类型比较的是数据值
- 引用数据类型比较的是地址值
String s1 = "abc";
String s2 = "abc";//存储在String串池当中
System.out.printIn(s1 == s2); //返回值 ==> true
String s3 = new String("abc"); //存储在堆区
System.out.printIn(s3 == s2); //返回值 ==> false ==>因为他们之间的地址不相同
字符串比较
boolean equals方法(要比较的字符串)
完全一样结果才是true,否则为false
boolean equalslgnoreCase(要比较的字符串)忽略大小写的比较
String s1 = "abc";
String s3 = new String("abc"); //存储在堆区
System.out.printIn(s1.equals(s3)); //返回值 ==> true
我们在做比较字符串的时候就必须利用包装的方法进行比较
1.4.2 字符串通过索引取出
public char charAt(int index)
: 根据索返回字符
public int length()
: 返回此字符串的长度
数组的长度
: 数组名.length
字符串的长度:
字符串对象.length()
1.4.3 取出字符串中的单个字符
chatAt(下标)
其下标原理与数组类似
String str = "abc";
for(int i = 0 ; i<str.length;i++){
//将每一个字符都打印出来
int result = str.charAt(i); // a b c
}
1.4.4 替换出字符串当中的字符
replace("要替换的内容","取代它的内容")
String phone = "15426978236TMD";
System.out.println(phone.replace("TMD","***"));
1.4.5 取出字符串中对应位置的字符
substring(起始位置,截至位置)
包前不包后
substring(起始位置)
从这个位置开始到最后
public class 手机屏蔽器 {
public static void main(String[] args) {
String phone = "15426978236TMD";
System.out.println(phone.replace("TMD","***"));
String start = phone.substring(0,3);
String end = phone.substring(7);
String result = "";
result = result+start+"****"+end;
System.out.println(result);
}
}
1.4.6 StringBuilder类
insert
倒着插入数据
StringBuilder sb = new StringBuilder();
sb.insert(插入的位置,插入的数据);
public class StringBuilderDom {
public static void main(String[] args) {
//1. 创建对象
StringBuilder sb = new StringBuilder("abc");
//2. 添加对象(int String double boolean都可以)
sb.append(1);
sb.append(1.2);
sb.append(true);
sb.append("abc");
System.out.println(sb);
}
}
反转
StringBuilder sb = new StringBuilder("abc");
//3.反转
sb.reverse();
System.out.println(sb);//cba
//4.添加字符串
sb.append("iop");
sb.append("qwe");
sb.append("asd");
sb.append("zxc");
//5. 将添加到库里面的所有字母全部被变成String
String str = sb.toString();
// 6. 计算长度
int len = sb.length();
System.out.println(str+"\n"+len);
1.4.7 StringJoiner
- Stringjoiner跟StringBuilder一样,也可以看成是一个容器,创建之后里面的内容是可变的
- 作用:提高字符串的操作效率,而且代码编写特别简洁,但是目前市场上很少有人用
JDK 8 出现的
StringJoiner sj = new StringJoiner("---");
sj.add("aaa").add("bbb").add("ccc");
System.out.println(sj); //aaa---bbb---ccc
StringJoiner sj = new StringJoiner(",", "[","]");
sj.add("aaa").add("bbb").add("ccc");
System.out.println(sj); //[aaa,bbb,ccc]
二 字符串原理
2.1 字符串存储的内存原理
- 直接赋值会复用字符串常量池中的
- new出来不会复用,而是开辟一个新的空间
2.2 ==号比较的到底是什么
- 基本数据类型比较数据值
- 引用数据类型比较地址值
小题一练
由于里面是"a"+"b"+"c" 没有变量,所以在项目开始时就变为了"abc",所以返回的是true