String的基础概念代码

本文详细解释了Java源代码中如何在编译阶段形成字符串常量表并将其转化为堆中String对象的过程,包括字符串相等关系的判断和字符串加操作的内部实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package string;

public class BasicConcept {
/*
*
* 在Java源代码中的每一个字面值字符串,比如下面sayHello方法里面的"Hello world"
* 都会在编译成class文件阶段,形成标志号为8(CONSTANT_String_info)的常量表(这个时候常量表还不是常量池),
* 接着当JVM加载 class文件的时候,会为对应的常量池建立一个内存数据结构,并存放在方法区中。
* 同时JVM会自动为CONSTANT_String_info常量表中的字符串常量字面值在堆中创建新的String对象(intern字符串 对象 ,又叫拘留字符串对象)。
* 然后把CONSTANT_String_info常量表的入口地址转变成这个堆中String对象的直接地址(常量池解析)。
*
*/
public void sayHello(){
System.out.println("Hello world!");
}
public static void main(String[] args){
//关于字符串相等关系的争论
/*
String sa = new String("abc");
String sb = new String("abc");
System.out.println(sa==sb);
String sc = "abc";
String sd = "abc";
System.out.println(sc==sd);
*/
// 字符串“+”操作的内幕
//代码1
String sa = "ab";
String sb = "cd";
String sab=sa+sb;
//上面过程实际上包含3个步骤:1,StringBuilder builder = new StringBuilder(sa);
//2builder.append(sb);3 builder.toString();
String s="abcd";
System.out.println(sab==s); // false
//代码2
// 代码2中"ab"+"cd"会直接在编译期就合并成常量"abcd",
//因此相同字面值常量"abcd"所对应的是同一个拘留字符串对象
String sc="ab"+"cd";
String sd="abcd";
System.out.println(sc==sd); //true
}
}
[code="java"][/code]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值