《Java的 String 深入了解》

一:String类的理解和创建对象

1)String 对象用于保存字符串,也就是一组字符序列。

2)字符串常量对象是用双引号括起的字符序列。例如:“你好”,“12.97”,“boy” 等

3)字符串的字符使用 Unicode 字符编码,一个字符(不区分字母还是汉字)占两个字节。

4)String 类较常用构造器(其他看手册)

String s1 = new String( );

String s2 = new String(String original);

String s3 = new String(char[ ] a);

String s4 = new String(char[ ] a,int startIndex,int count);

 二:String 创建剖析:

 1、创建 String 对象的两种方式。

1)方式一 : 直接赋值 String s = “hsp”;

先从常量池查看是否有 “hsp” 的数据空间,如果有,直接指向;如果没有则重新创建,然后指向。s 最终指向的是常量池的空间地址。

2)方式二: 调用构造器 String s2 = new String(“shp”);

先在堆中创建空间,里面维护了 value 属性,指向常量池的 hsp 空间。如果常量池中没有 “hsp”,重新创建,如果有,直接通过 value 指向。最终指向的是堆中的空间地址。

三:字符串的特性

说明:String是一个 final 类,代表不可变的字符序列。字符串是不可变的,一个字符串对象一旦被分配,其内容是不变的。

1、以下语句创建了几个对象?

  String s1 = "hello";
  s1 = "haha";

答案是:创建了个对象,注意 s1 只是一个变量。

String a = "hello" + "abc"

答案是: 创建了个对象。编译器很聪明,会自动优化,判断创建的常量池对象,是否有引用指向。String a = "hello" + "abc" ==> 优化等价 String a = "helloabc";

String a = "hello";
String b = "abc";
String c = a + b;

答案是:创建了个对象。但是我们来深入分析 c = a + b;的底层逻辑,注意a,b都是String的一个名称,而不是字符串常量。 

步骤1:创建一个StringBuilder sb = StringBuiler();

步骤2:执行 sb.append("hello");

步骤3:  执行 sb.append("abc");

步骤4:  执行 String c = sb.toString.

总结:c 指向的堆中的对象(String)value[ ] -> 池中的  “helloabc”

String a = "hello";
String b = "abc";
String c = a + b;
String d = "helloabc";
System.out.println(c == d)

答案是 false

重要规则:String c = "ab" + "cd"; 常量相加,看的是池;String c = a + b; 变量相加,看的是堆。

巩固加深印象。 

下面程序输出什么结果?

 下面程序输出什么结果?

 注意:Java只有值传递,没有引用传递。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值