为了账号安全,请及时绑定邮箱和手机立即绑定

java字符串

java字符串

fenkapian 2017-04-05 21:24:10
String a= "as"; String b= new String("as");a == b返回true还是false?为什么?
查看完整描述

2 回答

?
尧叔

TA贡献77条经验 获得超201个赞

String b= new String("as");

看见new 不管以前有没有都会创建一个新的String 。

所以a == b是false。


查看完整回答
2 反对 回复 2017-04-05
?
羽觞丨醉月

TA贡献22条经验 获得超6个赞

很简单  false

你要知道=和 new 是不一样的

= 是将对象存在栈中(常量池?) 而new出来的对象是存放在堆中的

意思是无论你new多少个"as",就会创建多少个对象,

而=是当你没有"as"的时候才会创建,有了"as",就不会再创建又一个对象了,只是会让那个引用变量指向那个对象

==比较对象的地址值。

你可以试一下String c=a;看看a和c是否相等.

String d=new String("as")看d和b是否相等验证一下我的说法。

查看完整回答
1 反对 回复 2017-04-05
?
丶子非鱼

TA贡献6条经验 获得超0个赞

public static void main(String [] args){

  String a=new String("as");

  String b=new String("as");

  System.out.println(a==b);//false:因为new出来的对象是放在堆中的  new出来的每个对象都有一个地址所以不同

 String d="ds";

  String c=d;

  System.out.println(d==c);//true  :=赋值是放在常量池中得(栈)中  所以如果有相同内容的字符串就不会再创建了,所以

  //d和c的指针指向了同一个地址

  d="as";

  System.out.println(a==d);

   }

查看完整回答
反对 回复 2017-04-06
  • fenkapian
    fenkapian
    那最后一个返回false,是因为什么呢?
  • 丶子非鱼
    丶子非鱼
    public static void main(String [] args){ String a=new String("as"); String b=new String("as"); System.out.println(a==b);//false:因为new出来的对象是放在堆中的 new出来的每个对象都有一个地址所以不同 String d="ds"; String c=d; System.out.println(d==c);//true :=赋值是放在常量池中得(栈)中 所以如果有相同内容的字符串就不会再创建了,所以 //d和c的指针指向了同一个地址 d="as"; System.out.println(a==d);//在不同的位置一个在池中 一个在堆中 所以为false a=a.intern(); System.out.println("估计是:"+(a==d));//intern() 方法:把a放到常量池中 如果常量池中有相同的内容的话 //a的指针指向该内容 没有的话把a对象添加到常量池中 所以这里是true }
  • 丶子非鱼
    丶子非鱼
    public static void main(String [] args){ String a=new String("as"); String b=new String("as"); System.out.println(a==b);//false:因为new出来的对象是放在堆中的 new出来的每个对象都有一个地址所以不同 String d="ds"; String c=d; System.out.println(d==c);//true :=赋值是放在常量池中得(栈)中 所以如果有相同内容的字符串就不会再创建了,所以 //d和c的指针指向了同一个地址 d="as"; System.out.println(a==d); a=a.intern(); System.out.println("估计是:"+(a==d)); }
  • 2 回答
  • 1 关注
  • 1568 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信