image.png
    image.png
    内存图详解:
    image.png
    动态数组和静态数组的元素是放在堆内存中的,数组变量名(数组地址)是放在栈内存中 — new出来的都是在堆内存(静态数组缩写了new)
    image.png

    1. package com.itheima.string;
    2. /*
    3. 目标:String类创建字符串对象的两种方式 一种是直接双引号,另一种是调用构造器
    4. */
    5. public class StringDemo1 {
    6. public static void main(String[] args) {
    7. // 方式一:直接使用双引号得到字符串对象
    8. String name = "我爱你中国";
    9. System.out.println(name); // 根据这个字符串name地址找到的内容
    10. // 方式二:
    11. // 1.public String(): 创建一个空白字符串对象,不含有任何内容(几乎不用)
    12. String s1 = new String(); // s1 = ""; 等于调用了String类中的无参构造器
    13. System.out.println(s1);
    14. // 2.public String(String): 根据传入的字符串内容,来创建字符串对象(几乎不用)
    15. String s2 = new String("我是中国人"); // 等于是String类里面有一个有参构造器
    16. System.out.println(s2);
    17. // 3.public String(char[] c): 根据字符数组的内容,来创建字符串对象
    18. char[] chars = {'a','b','中','国'};
    19. // new String(chars); 先new一个String类的对象,然后将字符数组传入String有参构造器中
    20. String s3 = new String(chars); // 将char字符数组转换为字符串对象
    21. System.out.println(s3);// ab中国
    22. // 4.public String(byte[] b): 根据字节数组的内容,来创建字符串对象
    23. byte[] bytes = {97,98,99,65,66,67};
    24. String s4 = new String(bytes); // 将byte字节数组传入String有参构造器,将byte数组(byte是整型)转换为String对象(变成字符串的ABC,对应ASCII码)
    25. System.out.println(s4); // abcABC
    26. System.out.println("-------------------");
    27. String ss1 = "abc";
    28. String ss2 = "abc";
    29. System.out.println(ss1 == ss2); // 结果是true,他们的地址相同,都是指向字符串常量池中的“abc”
    30. char[] chars1 = {'a','b','c'};
    31. String ss3 = new String(chars1);
    32. String ss4 = new String(chars1);
    33. System.out.println(ss3 == ss4); // 结果为false,因为创建了两个新的对象,对象不同,地址就不同,为false
    34. }
    35. }