Java String =“ ”和 new String的区别详解

J ava String =“ ”和 new String的区别
在说明两者区别之前,先说明两个概念: 常量池
常量池: 常量池在java用于保存在编译期已确定的,已编译的 class文件 中的一份数据。它包括了关于类,方法,接口等中的常量,也包括 字符串常量 ,如String s = "java"这种申明方式;当然也可扩充, 执行器 产生的常量也会放入常量池,故认为常量池是JVM的一块特殊的内存空间。
:简单来说就是java之中用来存放引用类型对象的对象
:简单来说是java之中用来存放基本数据类型和应用类型对象的引用

String s1="abc";
String s2="abc";
String s3=new String("abc");
String s4=new String("abc");
①s1==s2
②s1==s3
③s4==s3

首先,明白s1,s2,s3都只是引用而已,通过==判断是True 或者 False,根本就是判断是否指向同一个对象; 但是,在java某些引用数据类型之中引入了常量池这个概念,满足某种条件时不会创建引用数据类型的对象,而是创建一个常量。
我们通常知道引用数据类型通过new 来创建对象实例时,用==来比较是false;而有的引用数据类型除了new 还可以用其他方式来给对象的引用指向一个对象(这个对象可能是一个常量,可能是一个引用数据类型的类的实例),所以几个引用看起来值是一样的,但==比较起来不一定是true。
String s1="abc"就是这样一个概念,它会在常量池之中创建一个“abc”这样的常量,再次String s2=“abc”时,java会判断常量池之中是否已有“abc”这样一个常量,如果有将s2指向“abc”这个常量对象;Stirng s3=new String(“abc”)通过new 则会每次在堆之中创建一个对象,再把s3指向这个对象;那么最终结果:①true ②false ③false,究其原理s1和s2指向同一个常量,s1和s3指向两个不同的对象,s4和s3又指向两个不同的对象。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值