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));
    }
}

Java 特殊字符的政策表达式 java 特殊方法_包装类


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);
    }
}