关于String的实验性小笔记

一、String

  1. 首先,String不是基本数据类型(java八大基本数据类型:byte、short、int、long、float、double、char、boolean)。
  2. String是final类,不能被继承,一旦创建,就不能改变它的值。
  3. 对于已经存在的String对象,修改它的值,就是在字符串池中开辟一个新的空间存放新的值,并把这个值赋值给该对象,但串池中旧的值依然存在,重新把旧值赋值给该对象,对象就会重新连接串池中的旧值,地址不会变。如:
public class Test_String {

    public static void main(String[] args) {
        String st1 = "A";
        System.out.println("st1(A)的哈希码:"+st1.hashCode()+"  内存地址:"+System.identityHashCode(st1));
        //赋值
        st1 = "B";
        System.out.println("st1(B)的哈希码:"+st1.hashCode()+"  内存地址:"+System.identityHashCode(st1));
        System.out.println("A的哈希码:     "+"A".hashCode()+"  内存地址:"+System.identityHashCode("A"));
        //赋值回来
        st1 = "A";
        System.out.println("st1(A)的哈希码:"+st1.hashCode()+"  内存地址:"+System.identityHashCode(st1));
        //创建一个新对象指向串池中的“A”
        String st2 = "A";
        System.out.println("st2的哈希码:   "+st2.hashCode()+"   内存地址:"+System.identityHashCode(st2));
    }
}
/*
运行结果:
st1(A)的哈希码:65  内存地址:1163157884 //串池中创建新地址空间存放A,并赋值给对象str1
st1(B)的哈希码:66  内存地址:1956725890//串池中创建新地址空间存放B,并赋值给对象str1
A的哈希码:     65  内存地址:1163157884//这里可以看出A依旧存在于串池的地址空间内
st1(A)的哈希码:65  内存地址:1163157884//这里会先在串池中找到A的地址空间,重新把它拿出来赋值给对象str1,所以内存空间地址不变
st2的哈希码:   65  内存地址:1163157884//新建的str2对象,依旧会先在串池中找到A的地址空间,然后把它拿出来赋值给对象str2,所以内存空间地址依旧不变
*/
public class TestString {
    public static void main(String[] args) {
        String st1 = "A";
        String st2 = "B";
        String st3 = "AB";
        String st4 = st1+st2;
        System.out.println("str1:"+st1+" str2:"+st2+" str3:"+st3+" str4(st1+st2):"+st4);
        System.out.println("---哈希码---");
        System.out.println("st1:"+st1.hashCode());
        System.out.println("st2:"+st2.hashCode());
        System.out.println("st3:"+st3.hashCode());
        System.out.println("st4:"+st4.hashCode());
        System.out.println("---内存地址---");
        System.out.println("st1:"+System.identityHashCode(st1));
        System.out.println("st2:"+System.identityHashCode(st2));
        System.out.println("st3:"+System.identityHashCode(st3));
        System.out.println("st4:"+System.identityHashCode(st4));
        System.out.println("A+B:"+System.identityHashCode("A"+"B"));
        System.out.println("1.str1+str2:"+System.identityHashCode(st1+st2));
        System.out.println("2.str1+str2:"+System.identityHashCode(st1+st2));
        System.out.println("3.str1+str2:"+System.identityHashCode(st1+st2));
        System.out.println("---相等判断---");
        System.out.print("st3==\"AB\"?");
        System.out.println(st3=="AB");
        System.out.print("st3==st4?");
        System.out.println(st3==st4);
        System.out.println("st3.equals(st4)?"+st3.equals(st4));
        System.out.print("st4==\"AB\"?");
        System.out.println(st4=="AB");
        System.out.print("st4==\"A\"+\"B\"?");
        System.out.println(st4=="A"+"B");
        System.out.print("st3==\"AB\"?");
        System.out.println(st3=="AB");
        System.out.print("st3==\"A\"+\"B\"?");
        System.out.println(st3=="A"+"B");
        System.out.println("---重新赋值---");
        st1 = "C";
        System.out.println("st1:"+st1.hashCode());
        System.out.println("st1:"+System.identityHashCode(st1));
        System.out.println("---再赋值回去---");
        st1 = "A";
        System.out.println("st1:"+st1.hashCode());
        System.out.println("st1:"+System.identityHashCode(st1));
        System.out.println("C:"+System.identityHashCode("C"));
    }
}
/*
------------------------------------------------------------
运行结果:
str1:A str2:B str3:AB str4(st1+st2):AB
---哈希码---
st1:65
st2:66
st3:2081
st4:2081
---内存地址---
st1:1163157884
st2:1956725890
st3:356573597
st4:1735600054
1.str1+str2:21685669
2.str1+str2:2133927002
3.str1+str2:1836019240
A+B:356573597
---相等判断---
st3=="AB"?true
st3==st4?false
st3.equals(st4)?true
st4=="AB"?false
st4=="A"+"B"?false
st3=="AB"?true
st3=="A"+"B"?true
---重新赋值---
st1:67
st1:325040804
---再赋值回去---
st1:65
st1:1163157884
C:325040804

Process finished with exit code 0*/
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值