JAVA String 类(一) 内存问题

1、内存与String相关的知识点

  • String的声明是final的,不可被继承
  • String 实现了Serializable接口:表示String支持序列化
  • String实现了Comparable:表示String可以比较大小
  • String 内部定义了final char[] value 用于存储字符串数据
  • String 为不可变字符序列(对现有字符串操作时,需重指定内存区域赋值,哪怕是调用replace()方法)
  • 字面量的方式赋值,字符串声明在常量池中,常量池中不存重复的量
  • new 对象时,对象在堆内存

2、测试查验

package com.test;

import org.junit.Test;

public class TestString {

    @Test
   //用测试方法学习验证String 特点
    public void test(){
        //字面量的方式实例化
        //对象在方法去常量池中
        //这种方式堆内存没对象
        String s1 = "zhou";
        String s2 = "zhou";

        String string1 =  "hello";
        //new+构造器的方式实例化
        String string2 = new String("9527");
        String string3 = new String("9527");

        String string4 = "javaEE";
        String string5 = "hadoop";
        String string6 = "javaEEhadoop";
        String string7 = "javaEE"+"hadoop";
        String string8 = string4+"hadoop";
        String string9 = "javaEE"+string5;


        //地址值如果相等说明是同一个即不变性
        System.out.println(s1 == s2);//true
        System.out.println(string1);
        System.out.println(s2);
        //是两个不同对象(堆内存)
        //堆内存里面两个不同的对象指向常量池中的9527
        //两个对象,一个在堆内存,一个在常量池中
        System.out.println(string2==string3);//false 比较堆内存中的
        System.out.println("***************************************");
        System.out.println(string6 == string7);//true
        //右边有其他变量,都不在常量池,二在堆中
        System.out.println(string6 == string8);//false
        System.out.println(string6 == string9);//false

        //返回值得到的string10使用常量池中已经存在的 ''javaEEhadoop''
        String string10 = string5.intern();
        System.out.println(string10 = string6);//true
    }
}

运行结果

true
hello
zhou
false
***************************************
true
false
false
javaEEhadoop

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值