java中创建String对象

String类型创建对象的方式有两种:直接赋值,new 构造方法。

首先声明:String是final类,说明它声明的变量的地址都是不可以修改的,注意是地址已经固定了,改的只是引用指向的值。

1.直接赋值

String a="110"

这种类型就是我们所说的直接赋值,执行“String a = ”110“;”后,JVM常量池中开辟空间存放一个abc字符串空间(即创建对象)并让a指向该对象;

String a="110";
String b="110";

       1、执行“String a = ”110“;”后,JVM在常量池中开辟空间存放一个abc字符串空间并让a指向该对象;

       2、执行“String b = ”110“;”时,JVM会先检查常量池中是否已经存在了一内容为110的空间,如果存在就直接让b指向该空间,否则就会在开辟一个新的空间存放该字符串,所以,以上的第二行代码不会创建对象,上面的代码等同于下面代码:

String a="110";
String b=a;
system.out.println(a);
system.out.println(b);

输出:110

           110

2.new

new :直接存入堆内存;每new一次就会创建一个新的对象

String address=new String("河南郑州高新区");
String address2=new String("河南郑州高新区");

这两个对象会在堆中开辟两个地址,在栈里存储的是地址,在调用的时候会调用它的地址,所以利用==判断的时候,会输出false,因为他们二者的地址不同。

3.==在String中的使用

==对于直接赋值型创建的对象,==比较的是两个对象的值。

==对于new型创建的对象,==比较的是两个对象的地址。

一些讨论(参考资料)

1.  String a=“1”;//毫无疑问,这句话创建了一个对象,这个对象是   【常量对象】:“1”,而引用a指向了常量对象

2.  String b=new String("2");//毫无疑问,这句话建了创两个对象,一个是在new String出来的对象“2”,存在堆上;一个是【常量对象】:“2”,b是引用,指向堆上的对象

下面重点来了:

接着上面的代码,继续写如下语句

3.  String c=“1”;//这个时候,因为上面的第一条语句已经创建了常量对象1,它已经存在常量池里了,所以没有创建对象,引用c指向了常量对象

4.  String d = new String("1");//new String肯定是要创建一个对象在堆上的;而常量对象“1”已经在常量池里了,所以这条语句只创建了一个对象;引用d指向了堆上的对象。
 

 

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值