Java基础 9.6

1.String类的理解和创建对象

  1. String对象用于保存字符串,也就是一组字符序列
  2. 字符串常量对象是用双引号括起的字符序列 例如:"你好" "123"
  3. 字符串的字符使用Unicode字符编码,一个字符(不区分字母还是汉字)占两个字节
  4. String类较常用构造器(其他看手册)
String s1 = new String();
String s2 = new String(String original);
String s3 = new String(char[] a);
String s4 = new String(char[] a, int startlndex, int count)
package com.logic.string_;

/**
 * @author logic
 * @version 1.0
 */

public class String01 {
    public static void main(String[] args) {
        //1.String 对象用于保存字符串,也就是一组字符序列
        //2. "jack" 字符串常量, 双引号括起的字符序列
        //3. 字符串的字符使用Unicode字符编码,一个字符(不区分字母还是汉字)占两个字节
        //4. String 类有很多构造器,构造器的重载
        //   常用的有 String  s1 = new String(); //
        //String  s2 = new String(String original);
        //String  s3 = new String(char[] a);
        //String  s4 =  new String(char[] a,int startIndex,int count)
        //String s5 = new String(byte[] b)
        //5. String 类实现了接口 Serializable【String 可以串行化:可以在网络传输】
        //                 接口 Comparable [String 对象可以比较大小]
        //6. String 是final 类,不能被其他的类继承
        //7. String 有属性 private final char value[]; 用于存放字符串内容
        //8. 一定要注意:value 是一个final类型, 不可以修改(需要功力):即value不能指向
        //   新的地址,但是单个字符内容是可以变化

        String name = "jack";
        name = "tom";
        final char[] value = {'a', 'b', 'c'};
        char[] v2 = {'t', 'o', 'm'};
        value[0] = 'H';
        //value = v2; 不可以修改 value地址

    }
}

2.创建String对象的两种方式

  1. 直接赋值 String s = "logic"
  2. 调用构造器 String s = new String("logic")

3.两种创建String对象的区别

  • 方式一:先从常量池查看是否有"logic"数据空间,如果有,直接指向;如果没有则重新创建,然后指向 s最终指向的是常量池的空间地址
  • 方式二:先在堆中创建空间,里面维护了value属性,指向常量池的logic空间,如果常量池没有"logic",重新创建,如果有,直接通过value指向 最终指向的是堆中的空间地址

练习

package com.logic.string_;

/**
 * @author logic
 * @version 1.0
 */
public class StringExercise03 {
    public static void main(String[] args) {
        String a = "logic"; //a 指向 常量池的 “hsp”
        String b = new String("logic");//b 指向堆中对象
        System.out.println(a.equals(b)); //T
        System.out.println(a == b); //F
        //b.intern() 方法返回常量池地址
        System.out.println(a == b.intern()); //T //intern方法自己先查看API
        System.out.println(b == b.intern()); //F
    }
}


package com.logic.string_;

/**
 * @author logic
 * @version 1.0
 */
@SuppressWarnings("all")
public class StringExercise05 {
    public static void main(String[] args) {
        Person p1 = new Person();
        p1.name = "logic";
        Person p2 = new Person();
        p2.name = "logic";


        System.out.println(p1.name.equals(p2.name));//比较内容: True
        System.out.println(p1.name == p2.name);  //T
        System.out.println(p1.name == "logic");   //T

        String s1 = new String("bcde");
        String s2 = new String("bcde");
        System.out.println(s1 == s2); //False

    }
}

class Person {
    public String name;
}

4.String对象特性

String是个final类 代表不可变的字符序列

字符串是不可变的 一个字符串对象一旦被分配 其内容是不可变的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值