类类型

引用数据类型存的都是地址,通过地址指向对象;

基本数据类型存的都是具体值;

字符串 (String) 类型

  • 特点:
    1、字符创都是对象;
    2、一旦初始化,不能被更改,字符串缓冲区支持可变的字符串,因为 String 对象是不可变的,所以可以共享;
    3、共享;
    eg:
public class Demo06 {
    
    public static void main(String[] args) {
        
        String str = "abcd";
        
        System.out.println("str = " + str);
        
        str = "wxyz";
        
        System.out.println("str = " + str);
        
        String str1 = "啵斯喵";
        String str2 = "啵斯喵";
        
        System.out.println(str1 == str2);       
        /*重点:
            这里比较的是地址,第一次创建 "啵斯喵" 后创建地址,之后创建先查看缓冲区种有没有 "啵斯喵" 
          创建规则:
            有则创建的变量指向此地址,没有则重新在缓冲区中创建该字符 
        
        */
    }

}

 

若使用 new 关键字,则比较会出现不同情况

public class Demo07 {

public static void main(String[] args) {

String str1 = "abcd";
String str2 = new String("abcd");

System.out.println(str1 == str2); //flase
    // == 比较的是两个字符串的地址,故结果为 false
System.out.println(str1.equals(str2)); //true
    // equals 方法比较的是两个字符串的值,故结果为true
    // 由上可得:
    // 字符串 String 类中重写了 equals方法;

}

}

 

字符串和 new 字符串的区别:

package Demo;

public class Demo08 {
    
    public static void main(String[] args) {

        String str1 = "abc";
        String str2 = new String("abd");
        
        System.out.println(str1.hashCode());
        System.out.println(str2.hashCode());
        
    }

}
  • 字符串创建过程:
  • 字符串 str1 没有通过 new 关键字创建,则主方法压栈后,在方法区中的常量池中创建常量,主方法中的 String 变量 str1 指向常量池中的地址;
  • 字符串 str2 通过 new 关键字创建,则主方法压栈后,在方法区中的常量池中创建常量后,在堆中通过 new 关键字来创建 str2 ,并由 str2 指向常量池中的常量,在主方法中,则创建的字符串变量 str2 指向堆中开辟的空间的地址;
  • String 类的常用基本方法
public class Demo09 {
    
    public static void main(String[] args) {
        /*  字符串类的方法:
         *      1.有多少个字符(长度)
         *      2.获取字符在字符串中第一次出现的位置
         *      3.获取所需位置上的字符
         *      4.获取部分字符串
         *      5.将指定字符串替换成另一个字符串
         *      6.将字符串转换成字节数组或字符数组
         *      7.字符大小写互相转换
         *      8.将字符串按照指定方式分割成多个字符串
         *      9.字符的比较
         */
        String str = "abcderfgabcdersholgpqweiop";
        
        //1.获取字符串长度
         int length;
         length = str.length();
         System.out.println("字符串的长度为:" + length);
         System.out.println("-----------------------------------------");
         
         //2.获取字符在字符串中第一次出现的位置
         int index;
         index = str.indexOf('e');
         System.out.println("字符串中字符 e 出现的位置为:" + index);
         
         
         //实例:遍历字符串,找到字符串中出现的指定字符的所有位置;
         /*注意:indexOf方法,寻找字符串中从 index+1 开始寻找下一次字符 ‘e’ 出现的位置,
                查找到最后一个位置后,再查找下一次返回的值就为 -1 ;*/
         while(index != -1){
             System.out.println(index);
             index = str.indexOf('e', index+1);
         }
         System.out.println("-----------------------------------------");
         
         //3.获取所需位置上的字符
         //注意:String 中字符的位置都是从零开始
         char i ;
         i = str.charAt(2);
         System.out.println("字符串中第 2 个字符是:" + i);
         System.out.println("-----------------------------------------");