String类的创建

1 String 类的构造方法

——String() 
初始化新创建的 String对象,使其表示空字符序列。

例如:

String s = new String();

// s = null;

——String(char[] value) 
分配一个新的 String ,以便它表示当前包含在字符数组参数中的字符序列。

例如:

char value[] = {'a','b','c','d'};

String s = new String(value); 

// s = "abcd";

—— String(StringBuilder builder) 
分配一个新的字符串,其中包含当前包含在字符串构建器参数中的字符序列。

——String(StringBuffer buffer) 
分配一个新的字符串,其中包含当前包含在字符串缓冲区参数中的字符序列。

2 字符串的编码与解码

编码:数据在传输的过程中,要转为二进制。(即 字符串 - > byte数组)

例如:

String s = "你好";

byte bytes[] = s.getBytes("UTF-8");   //不写时使用平台默认编码

解码:数据在接受的过程中,将二进制转为需要的格式

例如:

String s = "你好";

byte bytes[] = s.getBytes("UTF-8"); 

String s2 = new String(bytes,"UTF-8");//在解码时,必须和编码使用一致的编码

 3 String类对象创建过程中的内存分配

例1:

String name = "张三";

String names = new String("张三");

System.out.println(name == names);

// 输出结果为false;即name 的地址指向与 names的地址指向不一致

 如上图所示,name在创建的过程中,地址直接指向字符串常量池的"张三";    names在创建的过程中,在堆中创建一个对象,names的地址指向对象,对象的地址指向字符串常量池的"张三"。

例2:

String s1 = "a" + "bc";

String s2 = s1 + "张三";

String s3 = "张三" + "abc";

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

// 输出结果为false;

因为s3创建时,地址指向字符串常量池的 "张三abc" ; s3创建时,因为含有变量s2,因此会在堆中创建一个指向 "张三abc" 的对象,s3再指向这个创建的对象。因此s2与s3不相等;

总结

String 类的对象改变值时,不能直接改变字符串常量池中的常量,而是通过创建一个常量,然后地址指向这个常量,同时对String对象的值进行改变时,堆中会创建一个新的对象,极其占据内存。

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值