Java基础之String相关知识


tip:以下是正文部分

一、String类

1、String 对象用于保存字符串,也就是一组字符序列
2、字符串的字符使用Unicode字符编码,一个字符(不区分字母还是汉字)都是占两个字节
3、String 类实现了接口Serializable[String 可以串行化:可以在网络传输]
实现 接口 Comparable[String 对象可以比较大小]
4、String 是final 类,不能被其他的类继承
5、String有属性private final char value[];用于存放字符串内容
6.value为final,所以不可以被修改,但是这个修改是指不能让value指向一个新的地址,但是value中单个字符内容是可以变换的
7. str.intern( ) 方法 : 如果常量池中存在str则返回str的值,如果不存在则返回指向的地址

//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)

二、String类新建及类型的细节

1、方式一 : 先从常量池查看是否有 " abc " 数据空间,如果有,直接指向;如果没有则重新创建,然后指向。s最终指向的是 常量池 的空间地址
2、方式二 : 先在堆中创建空间,里面维护了value属性,指向常量池的 abc 空间如果常量池没有"abc",重新创建,如果有,直接通过value指向。最终指向的是中的空间地址。
在这里插入图片描述

三、String初始化之对象创建的数量

String s1 = "hello";
s1="haha";

该代码中创建了两个对象,因为String的值更改时,在常量池中旧值不会消失,而是直接指向新值。

String num = "abc" + "def";

该代码中创建了一个对象,因为编译器会将"abc" + “def” 优化为 ”abcdef“

String num1 = "abc";
String num2 = "def";
String num3 = num1 + num2;

该代码中创建了三个对象,但是需要注意的是,num3在底层是先创建了一个StringBuilder对象,使用append将两个变量加入,再返回String

四、小测试

因为char数组中的值是基本数据类型,存储在堆中,所以直接被改变了

public class Main {
    public static void main(String[] args) {
        Test1 ex = new Test1();
        ex.change(ex.str, ex.ch);
        System.out.print(ex.str + " and "); 
        System.out.println(ex.ch);
        // hsp and hava
    }
}
class Test1 {
    String str = new String("hsp");
    final char[] ch = {'j', 'a', 'v', 'a'};

    public void change(String str, char ch[]) {
        str = "java";
        ch[0] = 'h';
    }
}

五、format

String num = String.format("我的名字是%s,性别为%c",name,sex);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值