java String字符串池的问题 为什么输出一样,却有true 有false
Stringstr=newString("aaa");Stringstr2=newString("aaa");System.out.println(str);System...
String str = new String("aaa");
String str2 = new String("aaa");
System.out.println(str);
System.out.println(str2);
System.out.println(str == str2);
System.out.println("----------------");
String str3 = "bbb";
String str4 = "bbb";
System.out.println(str3);
System.out.println(str4);
System.out.println(str3 == str4);
System.out.println("----------------");
输出 aaa aaa false
bbb bbb true 展开
String str2 = new String("aaa");
System.out.println(str);
System.out.println(str2);
System.out.println(str == str2);
System.out.println("----------------");
String str3 = "bbb";
String str4 = "bbb";
System.out.println(str3);
System.out.println(str4);
System.out.println(str3 == str4);
System.out.println("----------------");
输出 aaa aaa false
bbb bbb true 展开
4个回答
展开全部
String str = new String("aaa");
首先要明白,这句话创建了2个对象,第一个是括号中的“aaa”对象,其二是new的一个String对象
简单说,执行完毕之后,串池中有一个对象“aaa”,堆中有一个对象“aaa”
str引用指向的是堆中得对象
String str2 = new String("aaa");
执行完毕,堆中又多了一个对象“aaa”,str2引用指向该对象
所以str == str2为false,因为这是2个引用,指向的是2个不用的对象(堆中得对象)
String str3 = "bbb";
String str4 = "bbb"
str3和str4都是指向的串池中得对象;所以为true
首先要明白,这句话创建了2个对象,第一个是括号中的“aaa”对象,其二是new的一个String对象
简单说,执行完毕之后,串池中有一个对象“aaa”,堆中有一个对象“aaa”
str引用指向的是堆中得对象
String str2 = new String("aaa");
执行完毕,堆中又多了一个对象“aaa”,str2引用指向该对象
所以str == str2为false,因为这是2个引用,指向的是2个不用的对象(堆中得对象)
String str3 = "bbb";
String str4 = "bbb"
str3和str4都是指向的串池中得对象;所以为true
展开全部
个人理解,上面String str=new String("aaa")所比较的是地址
而后面所比较的是两个字符串的值是否相等
关于String str = "abc "的内部工作。Java内部将此语句转化为以下几个步骤:
(1)先定义一个名为str的对String类的对象引用变量:String str;
(2)在栈中查找有没有存放值为 "abc "的地址,如果没有,则开辟一个存放字面值为 "abc "的地址,接着创建一个新的String类的对象o,并将o的字符串值指向这个地址,而且在栈中这个地址旁边记下这个引用的对象o。如果已经有了值为 "abc "的地址,则查找对象o,并返回o的地址。
(3)将str指向对象o的地址。
而后面所比较的是两个字符串的值是否相等
关于String str = "abc "的内部工作。Java内部将此语句转化为以下几个步骤:
(1)先定义一个名为str的对String类的对象引用变量:String str;
(2)在栈中查找有没有存放值为 "abc "的地址,如果没有,则开辟一个存放字面值为 "abc "的地址,接着创建一个新的String类的对象o,并将o的字符串值指向这个地址,而且在栈中这个地址旁边记下这个引用的对象o。如果已经有了值为 "abc "的地址,则查找对象o,并返回o的地址。
(3)将str指向对象o的地址。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你创建了两个对象str和str2,str和str2存放的不是str,str2的内容 而是字符串的地址,str和str2是两个不同的对象,他们的地址可能相同,也可能不同 所以表达式的值为false
下面你没有创建对象而只是创建了两个变量,所以只是进行变量值得比较 ,发现两个值相同 ,所以返回的是true
下面你没有创建对象而只是创建了两个变量,所以只是进行变量值得比较 ,发现两个值相同 ,所以返回的是true
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个问题很经典
主要是理解一下 堆和栈 还有==和equls的区别
str和str2是两个内存地址不同的对象 用==号比较的是内存地址 所以会false
而st3 str4在内存里的状态地址相同。true
主要是理解一下 堆和栈 还有==和equls的区别
str和str2是两个内存地址不同的对象 用==号比较的是内存地址 所以会false
而st3 str4在内存里的状态地址相同。true
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询