java string 路径_Java中String对象的存储位置(学习笔记)

packagetest.string.equal;public classMain {/*** 创建了三个对象,"helloworld对象创建在常量池中",每次new String()都会创建一个对象在堆内存中。*/

voidtest() {

String s1="helloworld";

String s2= new String("helloworld");

String s3= new String("helloworld");

}/*** 程序只创建一个字符串对象“Java”,存放在常量池中,所以s1==s2 为true*/

voidtest1(){

String s1="Java";

String s2="Java";

System.out.println(s1==s2);

}/**第一个new String("Java"):创建了两个对象,Java创建于常量池中,String对象创建于堆内存中。

* 第二个new String("Java"):由于常量池中有Java对象,所以只需创建一个对象,String对象创建于堆内存中。

* s1与s2分别指向String对象堆内存,所以s1==s2 为false*/

voidtest2() {

String s1=new String("Java");

String s2= new String("Java");

System.out.println(s1==s2);

}/**常量的值在编译的时候就确定了,"hello"、"world"都是常量,因此s2的值在编译的时候也确定了,

* s2指向常量池中的"hello world",所以s1==s2为true

**/

voidtest3() {

String s1="hello world";

String s2="hello "+"world";

System.out.println(s1==s2);

}/**s4由两个String变量相加得到,不能再编译时就确定下来,不能直接引用常量池中的"helloworld"对象,而是在堆内存中创建一个新的String对象并由s4指向

* 所以s1==s4为false

**/

voidtest4() {

String s1="helloworld";

String s2="hello";

String s3="world";

String s4=s2+s3;

System.out.println(s1==s4);

}/**s2与s3被final修饰为宏变量,不可更改,编译器在程序使用该变量的地方直接使用该变量的值进行替代,所以s4的值在编译的时候就为"helloworld"

* 指向常量池中的"helloworld"对象

* 所以s1==s4为true

**/

voidtest5() {

String s1="helloworld";final String s2="hello";final String s3="world";

String s4=s2+s3;

System.out.println(s1==s4);

}public static voidmain(String[] args) {

Main o= newMain();

o.test1();

o.test2();

o.test3();

o.test4();

o.test5();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值