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]
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]