java string 1,关于java中String的1点理解

关于java中String的一点理解

String类是java的最基本类之一,很好的掌握它的原理很是必要的!

1、String的Final类型的,是不可继承 的,final类默认的方法都为final类型,保证了方法不能被重载,成员变量不影响

2、String的本质就是char[] 并且其值是不可改变的

3、String str = "abc"是一种特殊的创建方式,"abc"存在常量区,str只是对其的引用

4、String可以通过+串联,形成一个新的对象

5、java运行时会维护一个String Pool,用来存放程序运行产生的字符串,并且里面的字符串不会重复

6、创建字符串的方式很多,归纳起来有三类:

其一,使用new关键字创建字符串,比如String s1 = new String("abc");

其二,直接指定。比如String s2 = "abc";

其三,使用串联生成新的字符串。比如String s3 = "ab" + "c";

public class MyString {

public static void main(String[] args) {

//关于String堆栈分析

String str1 = "abc";

System.out.println("abc" == str1);

/*1、在栈上分配内存存放str1

2、String池中开辟一块空间,存放String常量"abc";

3、str1指向String池中的"abc";

4、输出true

*/

String str2 = new String("abc");

System.out.println(str1 == str2);

/*1、栈上分配内存存放str2

2、此时的"abc"已经存在,然后将"abc"的引用传给String的构造函数,在堆上创建一个新的String对象

then the JVM still arranges for "abc" to be in that pool, and still

provides a reference to it, but that reference is then passed into a

constructor to create a NEW String object that's NOT in the pool and

copies the first one. It's that second String object which ends up

being assigned to the reference

3、str2指向在堆上的新创建的对象,

4、输出false

*/

String str3 = "a"+"bc";

System.out.println("abc" == str3);

/*1、栈上分配内存存放str3

2、根据编译器合并已知量的优化功能,池中开辟一块空间,存放合并后的String常量"abc"

3、str3指向在堆上的"abc"’

4、输出true

*/

String str4 = "a";

String str5 = "bc";

String str6 =str4+str5;

System.out.println("abc" == str6);

/*1) 栈中开辟一块中间存放引用s1,s1指向池中String常量"a",

2) 栈中开辟一块中间存放引用s2,s2指向池中String常量"b",

3) 栈中开辟一块中间存放引用str5,

4) s1 + s2通过StringBuilder的最后一步toString()方法还原一个新的String对象"ab",因此堆中开辟一块空间存放此对象,

5) 引用str6指向堆中(s1 + s2)所还原的新String对象,

6) str6指向的对象在堆中,而常量"ab"在池中,输出为false

*/

String str7 = new String("abc");

String str8 = new String("abc");

if(str7 == str8){

System.out.println("str7 等于str8");

}else{

System.out.println("str7 不等于str8");

}

//输出str7 不等于str8

}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值