栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java -常用类 - String对象特性分析

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java -常用类 - String对象特性分析

字符串的特性
  1. String是一个final类,代表不可变的字符序列
  2. 字符串是不可变的,一个字符串对象一旦被分配,其内容是不可变的
举例
//以下语句创建了几个对象?画出内存布局图。
String s1 = "hello";
s1 = "haha";
//创建了两个对象

//下面语句创建了几个对象
String a = "hello" + "abc";
//创建了一个对象
//String a = "hello" + "abc"; //===> 编译器优化后 String a = "helloabc";

//创建了几个对象?画出内存图


public class StringExercise08 {
    public static void main(String[] args) {
        String a = "hello"; //创建 a 对象
        String b = "abc";   //创建 b 对象
        //分析源码
        //1.先创建一个 StringBuilder()
        //2.执行 sb.append("hello");
        //3.sb.append("abc");
        //4.String c = sb.toString()
        //最后其实是 c 指向堆中的对象(String) value[] -> 池中 "helloabc"
        String c = a + b;
        //String c = "hello" + "abc";	//注意与上面完全不同
        //一共有三个对象,但是并不简单
        //小结:底层是 StringBuilder sb = new StringBuilder();sb.append(a);sb.append(b);sb是在堆中,并且append 是在原来字符串的基础上追加的
        //重要提示:String c1 = "ab" + "cd";	常量相加,看的是池。String c1 = a + b;变量相加,是在堆中
    }
}

//下面代码输出什么,并说明原因
String s1 = "hspedu";	
String s2 = "java";
String s5 = "hspedujava";
String s6 = (s1 + s2).intern();		//指向 s1 + s2字符串的的常量池地址
System.out.println(s5 == s6);		//T
System.out.println(s5.equals(s6));	//T

public class StringExercise04 {
    String str = new String("taotao");
    final char[] ch = {'j','a','v','a'};

    public void change(String str,char ch[]){
        str = "java";
        ch[0] = 'h';
    }
    public static void main(String[] args) {
        StringExercise04 ex = new StringExercise04();
        ex.change(ex.str,ex.ch);        //str = taotao, ch = java
        System.out.println(ex.str + "and");  //taotao and hava
        System.out.println(ex.ch);          //
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/691254.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号