String

作者: 是归人不是过客 | 来源:发表于2020-09-18 09:57 被阅读0次

    java.lang.String是字符串类型

    1、字符安川一旦船舰不可再改变。“abc”字符串对象一旦创建,不可在改变称“abcd”

    2、提升字符串的访问效率,在程序中使用”缓存“技术,所以java中所使用”双引号 “括

    起来的字符串都会在”字符串常量池“中创建一份,字符串常量池中被存储

    3、在程序执行过程中,如果程序用到某个字符串,例如”abc“,那么程序会在字符串

    常量池中去搜索该字符串,如果没有找到则在字符串常量池中新建一个”abc“字符串,

    如果找到则直接拿过来用(字符串常量是一个缓存区,为了提高访问字符串效率)

    public class Test{
        public static void main(String[] args) {
            // 创建一个"abc"字符串对象,该对象得内存地址,让s1变量保存
            // s1是引用,s1指向"abc"对象
            String s1 = "abc";
            
            //可以让s1重新指向,s1是局部变量且没有final,所以s1可以从新指向
            s1 = "def";
            
            String s2 = "hello"; // 字符串常量池中新建一个hello字符串对象,该对象不变
            String s3 = "hello"; //内存地址中直接拿来
            
            System.out.println(s2 == s3); //true
            
            // 比较两个字符串是否相等,不能用”==“
            String s4 = new String("abc");
            String s5 = new String("abc");
            
            System.out.println(s4 == s5); //false
            
            System.out.println(s4.equals(s5)); // true
            
        }
    }
    

    分析一下程序创建对象的区别

    1、String s1 = "abc"; 只会在字符串常量池中创建一个"abc"字符串对象

    2、String s2 = new String("abc");会在字符串常量池中创建一个hello字符串对象,并且会在堆中再创建一个字符串对象

    第二种方式比较浪费内存,常用的是第一种。

    public class Fox{
        public static void main(String[] args) {
            
            String s1 = "abc";
            String s2 = new String("abc");
            
        }
    }
    

    面试题:

    判断下面程序能创建几个对象

    public class Test{
        public static void main(String[] args) {
            // 判断以下程序能创建几个对象
            String s1 = new String("hello");
            String s2 = new String("hello");
            // 答:三个对象
            //堆中两个,方法区字符串常量池中1个
        }
    }
    

    注意:

    1、 使用String的时候我们应该注意的问题,尽量不要使用字符串频繁拼接的操作,因为

    字符串一旦创建不可改变,频繁拼接,就会在字符串常量池总创建大量的字符串,对

    象,给垃圾回收带来问题。

    2、

    public class Fox{
    public static void main(String[] args) {

        String s1 = "abc";
        
        String s2 = new String("abc");
        
        byte[] bytes = {97,98,99,100};
        String s3 = new String(bytes);
        System.out.println(s3); // abcd String已经重写了Object中toString方法        
    }
    

    }

    相关文章

      网友评论

          本文标题:String

          本文链接:https://www.haomeiwen.com/subject/txolyktx.html