A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 聪明一只哈 中级黑马   /  2016-5-23 06:31  /  376 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1.String类的概述(重点牢记)
                概述:
                        字符串就是把一个个的字符串起来,组成字符串.
                        字符串字面值"abc"也可以看成是一个字符串对象。
                        字符串是常量,一旦被赋值,就不能被改变。
                        这里的"不能被改变"指的是字符串在常量池中的值不能被改变,因为字符串是常量.
                        String s = "abc";
                        s = "def"; //此时是把s的引用指向了常量池中的"def"对象地址值."abc"本身没有发生改变.
                                                        //从String类的原码来看String对象的值是保存在一个叫做value字符数组里面.
                                                        //private final char value[]
                        "def".toString();//"def"能直接调用toString()方法说明"def"是一个字符串对象.
        2.String类的构造方法
                空串和null的区别?       
                        String s1 = "";                //这是一个字符串对象,只不过值是空
                        String s2 = null;        //这里没有对象.只有一个被赋值为null类型的String s2引用.
                        //什么时候把引用数据类型赋值为null呢?
                        当你不想再使用这个对象的时候,想它被回收的时候.
                构造方法:
                        public String()
                        public String(byte[] bytes)
                        public String(byte[] bytes, int start, int length)        //IO流可能会用到       
                        public String(char[] value)
                        public String(char[] value, int start, int length)        //IO流可能会用到
                        public String(String s)
                        //上面这些构造方法在实际开发中使用的都非常少
                        直接用常量赋值:String s = "abc";                //开发常用
        3.String面试题
                a.java中创建的字符串都会存在一个叫做常量池的地方.
                b.用new创建的String对象
                        1.此字符串已经存在常量池中,则直接拿过来用,这时只在堆中创建了一个对象.
                        2.此字符串不在常量池中,则在常量池中创建该字符串,然后在把副本值给堆中String对象
                        此时创建了两个对象(堆和常量池)
                c.字面值常量的字符串相加(+号)
                        java中会有字符串常量优化机制,在编译的时候会直接在常量池中完成相加操作,
                        如果有不再创建对象,直接拿来用.
                d.字符串变量相加(+号)
                        字符串变量相加,低层其实用StringBuffer(StringBuild)对象在堆中完成相加操作,
                        相加后存的其实StringBuffer.toString()地址值.
                简单记忆:
                        java字符串常量优化机制:有就使用,没有就创建.
                        如果是字符串变量和字符串常量拼接,会先创建一个字符串缓冲区(StringBuffer)的对象,
                        拼接完成之后,会将该对象转成String,最后把地址值赋值给String引用.

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马