相当于字典,可以浏览一遍,遇到需要的便回来查。
一、Object类
1. 如果一个类没有指定父类,那么这个类的父类的Object类;
如果一个类指定了父类,那么这个类的间接父类的Object类;
2. ==
基本数据类型:判断两个变量是否相等
引用数据类型:判断两个引用是否指向同一个对象—地址
3. equals()
1)Object类
equals()和引用数据类型中==的作用是相同的
2)String类
equals()用来判断两个字符串的内容是否相同,和父类Object中的equals方法作用不一样,
原因是:String类中重写了父类Object中的equals方法。
3)自定义的类型(开发人员自己设计的类)
如果需要判断对象的内容(属性的值)是否相同,那么就要重写equals()方法(可以通过开发工具生成)
4. toString()
返回对象的字符串表示形式:全类名@哈希值
通过System.out.println(对象名)的操作,会默认调用toString方法,等效于System.out.println(对象名.toString())
如果希望打印自定义类型当中的属性,需要重写toString()方法。
二、包装类----基本数据类型的包装类
1. 解决的问题
解决了基本数据类型不能被当成类使用的问题;
2. 基本类型对应的包装类
byte------->Byte
short------>Short
int--------->Integer
long------->Long
float------->Float
double---->Double
char------->Character
boolean–>Boolean
除int、char以外,均为首字母大写。
3. 基本数据类型和包装类之间的转换
1)基本数据类型—>包装类----装箱
手动装箱 Integet i = new Integet(10);
自动装箱 Integer i = 10;
2)包装类—>基本数据类型----拆箱
手动拆箱 int a = i.intValue();
自动拆箱 int a = i;
4. 基本数据类型和字符串转换
1)基本数据类型–>String
//方法一
int a = 100;
String str = a + "";
//方法二
int a = 100;
String str = String.valueOf(a);
2)String–>基本数据类型
例如:
String str = "100";
int a = Integer.parseInt(str);
String str1 = "110.9f";
float f = Float.parseFloat(str1);
String str2 = "100.8";
double d = Double.parseDouble(str2);
三、字符串相关的类(String、StringBuffer、StringBuilder)
String 等同于 char[]
1.如何创建字符串
String str1 = "hello world";//常用
String str2 = new String("hello world");
//创建字符串的方式
String str = "hello world";
String str1 = new String("hello world");
char[] arr = {'h', 'e', 'l', 'l', 'o'};
String str2 = new String(arr);
System.out.println("str.equals(str1):" + str.equals(str1));
System.out.println("str.equals(str2):" + str.equals(str2));
可见,两种方式创建的字符串值相等,且String 等同于 char[]
2. 判断功能
2和3部分内容,看看即可,并不会经常使用,因为这些判断和获取,有更简单、高效的办法(正则表达式)能解决
equals(String string) 判断两个字符串的内容是否相同
equalsIgnoreCase(String string) 判断是否相等,忽略大小写
contains(String string) 判断是否包含
startsWith(String string) 判断字符串是否以特定字符串开始
startsWith(String string,int i) 判断字符串是否以特定字符串开始---带偏移量(i表示向后偏移的字符数)
endsWith(String string) 判断字符串是否以特定字符串结束
isEmpty() 判断字符串是否为空
compareTo(String) 按字典顺序比较两字符串的值
//关于compareTo举例说明
System.out.println("aaa".compareTo("abc"));
System.out.println("aaa".compareTo("aaa"));
System.out.println("aaac".compareTo("aaa"));
输出结果为:
-1
0
1
原理:从前往后依次比较所有字符,若原字符串的字符等于相比较的字符,则向后比较;若大于,则为1;小于则为-1。当有一方结束,而另一方未结束时,长的大。
3. 获取功能
length() 获取字符串的长度
charAt(int i) 获取特定位置的字符(以0为首个字符)
substring(begin) 获取子字符串
substring(begin, end) 获取子字符串,包含begin,不包含end
toUpperCase() 获取字符串的全大写形式
replace(char, char)
replace(String, String) 获取将某一字符(或字符串)替换为另一字符(或字符串)后的字符串(前后对应)
trim() 获取去除首尾空格后的字符串
其中常用方法为:equals、isEmpty、length、trim
4.正则表达式(必须掌握!)
正则表达式不是Java独有的功能,而是广泛应用于多种编程语言中,并且语法完全相同。
正则表达式是包含特定规则的字符串,用于检测字符串是否符合某种规则,或将特定格式的某些内容提取出来。
原理:正则表达式从目标字符串首个位置,逐个比较,当且仅当目标字符串中包含完全符合
正则表达式的子串时,视为匹配成功,否则匹配失败。
常用的正则表达式符号:
^ 匹配字符串的开始(写在正则表达式的开始位置,若有此符号,则表明正则表达式必须从目标字符串的首个位置开始匹配)
即,目标字符串必须以正则表达式的格式开始。
$ 匹配字符串的结尾
即,目标字符串必须以正则表达式的格式结束。
a-z 匹配所有小写字母
A-Z 匹配所有大写字母
0-9 匹配所有阿拉伯数字
[] 表示一个字符(在括号内填入上面三种,可以对该字符进行限制)
判断字符串是否只有1个或者没有字符X
X?
判断字符串是否没有或者多个有字符X
X*
判断字符串是否有1个或者多个有字符X
X+
判断字符串是否只有n个字符X
X{n}
判断字符串是否只有n个或大于n个字符X
X{n,}
判断字符串是否有大于n个且小于m个字符X
X{n,m}
在Java中使用正则表达式步骤:
String str1 = "a";
//正则表达式完成:判断字符串str1是否只有一个字符,并且这个字符是英文字母
//1.按要求编写正则表达式
String reg1 = "^[a-zA-Z]$";
/*必须以正则表达式开始和结束
* 即目标字符串不再仅仅是包含正则表达式
* 而是完全符合正则表达式时
* 才算匹配成功
* 匹配一个字符
* 既可以是大写也可以是小写
* */
System.out.println(str1.matches(reg1));
/*目标字符串.matches(正则表达式)
* 进行匹配,若匹配成功返回true,匹配失败返回false
* */
再来几个,熟练一下。尝试读懂这些正则表达式,并且预测结果。
String str2 = "ab";
String reg2 = "^[a-zA-Z]{2}$";
System.out.println(str2.matches(reg2));
String str3 = "abcdefgdada";
String reg3 = "^[a-zA-Z]{10,20}$";
System.out.println(str3.matches(reg3));
String str4 = "abacgdag090";
String reg4 = "^[a-zA-Z0-9]{10,20}$";
System.out.println(str4.matches(reg4));
//只能以字母开头
String str5 = "5abacgdag090";
String reg5 = "^[a-zA-Z][a-zA-Z0-9]{9,19}$";
System.out.println(str5.matches(reg5));
String str6 = "1561";
String str61 = "";
String reg6 = "^[0-9]$";
System.out.println(str6.matches(reg6));
System.out.println(str61.matches(reg6));
String reg7 = "^[0-9]*$";
System.out.println(str6.matches(reg7));
String str8 = "0";
String reg8 = "^[0-9]?$";
System.out.println(str8.matches(reg8));
结果:
5. 字符串在内存当中的存储
编译过程中会对字符串进行优化 static
字符串长度不可改变
6. StringBuffer StringBuilder
String类型进行字符串拼接消耗内存的问题
append()
toString()
StringBuffer---在多线程环境下使用
StringBuilder----在单线程环境下使用