String类:
1.直接赋值:存放再常量池中,常量池中相同的字符串只有一份。
可以使用.intern()方法进行手动入池。
2.构造法:使用关键字new进行对象实例化
字符串的比较:
==本身是进行数值比较的,如果用于对象比较,比较的是两个对象所保存的内存地址,而并不是对象的内容。
进行对象内容比较使用String类提供的equals方法。
匿名对象白存在堆内存中。
字符串一旦定义,不可改变。
public class TextDemo1 {
public static void main(String[] args) {
String str1 = "hello worle!";//str是一个对象,保存在堆中,准确地说,直接赋值的放在常量池
String str2 = new String("hello world!!!");
String str3 = new String("hello worle!");
System.out.println(str1);
System.out.println(str2);
System.out.println(str1.equals(str3));
}
}
String的拼接每次都会产生一个新的对象
StringBuffer和 StringBuider也是操作字符串的两个类。
StringBuffer中有synchronized(保护现场安全)关键字,StringBuider没有。
StringBuffer多线程情况下使用因为有synchronized线程安全关键字。
StringBuider ,String没有,单线程情况下(线程不安全)。
StringBuffer中有个append方法
append(这个方法返回当前对象那个的引用)(地址不变)
拼接时。String每次都会产生新的空间,StringBuffer和 StringBuider中的append不会产生新的空间
Character.isDigit():判断一个字符是否为数字
//计算字符串中数字的个数
public class TextDemo2 {
public static void main(String[] args) {
String string = new String("abc12de");
int count = 0;//计算字符串中数字的个数
for (int i = 0; i < string.length(); i++) {
if (Character.isDigit(string.charAt(i))) {
count++;
}
}
System.out.println(count);
}
}
字符串的比较方式:找到第一个不相同的字符,进行比较。
Object类:
Object可以接受任意的对象,因为Object是所有类的父类,但是Object并不局限于此,他可以接受所有的数据类型,包括类,数组,接口。
class Person{
}
class Student{
}
public class TextDemo3 {
//使用Object类接受所有类的对象
public static void fun(Object obj){
System.out.println(obj);
}
public static void main(String[] args) {
fun(new Person());
fun(new Student());
}
}
获取对象信息:
在使用对象直接输出的时候,默认输出的是一个地址编码。如果现在使用的是String类,该类对象直接输出的是内容,主要原因就是toString()方法的问题。
class Human{
private String name ;
private int age;
public Human(String name,int age){
this.name = name;
this.age = age;
}
}
public class TextDemo5 {
public static void function(Object obj){
System.out.println(obj.toString());//Object提供的toString()方法只能得到一个地址,如有需要,则要覆写该方法
}
public static void main(String[] args) {
function(new Human("张三",18));
function("hello");
}
}
覆写toString()方法:(alt+insert)
@Override
public String toString() {
return "Human{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
包装类:包装类就是将基本数据类型封装到类中。
对于包装类的使用,提供了两种类型:
1.对象型(Object的直接子类):Boolean、Character(char);
2.数值型(Number的直接子类): Byte、Double、Short、Long、Integer(int)、Float;
装箱:将基本数据类型变为包装类对象,利用每一个包装类提供的构造方法实现装箱处理。
拆箱:将包装类中包装的基本数据类型取出。利用Number类中提供的六种方法。
public class TextDemo6 {
public static void main(String[] args) {
Integer num = new Integer(55); // 装箱
int data = num.intValue(); // 拆箱
System.out.println(data);
}
}