我是靠谱客的博主 幽默方盒,最近开发中收集的这篇文章主要介绍两种字符串创建方式的对比[java]String对象两种实例化方式的对比,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

String对象两种实例化方式的对比

通过字面值直接赋值创建的方式:

这个时候如果有多个字符串变量以字面值创建方式创建,那么这些字符串变量其实是指向了同一个对象,指向了同一个地址(这个地址是字符串常量池中的一个地址)

  • 通过字面值创建的方式我们在创建时先要看在字符串常量池中有没有值和我们要创建的字符串对象的值一样的,如果没有,就在字符串常量池中创建出一个对象,如果已经有了的话,那么我们只需要将这个字符串引用指向字符串常量池中的这个对象的地址就可以了

  • 注意:字符串常量池中不允许有多个相同值的对象,每个值的对象在字符串常量池中最多有一个,第二次创建时只需要将引用指向已有的对象就可以了

这里我们可以来看一个例题:

public class Demo{
    public static void main(String [] args){
        String s1="123";
        String s2="123";
        System.out.println(s1==s2);//这里输出的结果是什么?
    }
} 

这里输出的结果也是true

由于我们这里通过字面量直接赋值的方式创建了两个相同值的对象,所以这里创建的两个字符串变量是指向了同一个对象的首地址,也就是指向了同一个内存区域,

通过new+构造器的方式创建的方式:

通过这种方式创建的多个相同值的字符串对象的地址不同,这种方式创建就是在堆区中创建字符串对象,在堆区中创建出来的对象每一个对象都是独一无二的

这里有一个例题:

public class Demo2{
    public static void main(Stirng[] args){
        String s1=new String("123");
        String s2=new String("123");
        System.out.println(s1==s2); //这里的输出结果是true还是false呐?
    }
}

上面的输出结果是false

  • 原因:这里我们通过new + 构造器的方式创建字符串对象是在堆区中创建的,每个对象都是独一无二的,这时候的输出结果也就为false

最后:这里由一道面试题

问题:String s =new String("abc");这条语句执行时创建了几个对象?
  • 答案是创建了两个对象
  • 因为这里我们在实质上是执行了 String str =new String(String original);
  • 而这条语句的本质是:this.value=original.value;
  • 也就是这里我们穿参的时候可以说是执行了 string original =“abc”; (在这里我们在字符串长两处中创建了第一个对象)
  • 接下来我们又通过new关键字创建了第二个对象(s),这个对象是在堆空间中创建的

最后

以上就是幽默方盒为你收集整理的两种字符串创建方式的对比[java]String对象两种实例化方式的对比的全部内容,希望文章能够帮你解决两种字符串创建方式的对比[java]String对象两种实例化方式的对比所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部