A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Inspur 中级黑马   /  2013-9-15 07:47  /  1227 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨增坤 于 2013-9-15 09:42 编辑

我想问问String str=new String("x");
和String str="x";
这两句话有什么区别,课上毕老师讲的没大听懂,以前自己都是使用第二种写法,以后做开发时最好使用哪种写法?谢谢大家

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

6 个回复

倒序浏览
前者在内存中有两个对象,后者在内存中只有一个对象
两者在内存的地址不同,但他们对应的值相同
回复 使用道具 举报
如果你明白了如下所示代码,你就会明白其间的差别:
  1. public class StrTest
  2. {
  3.      public static void main(String[] args)
  4.     {
  5.         //
  6.         String str1 = "Java";
  7.         String str2 = "Java";
  8.         System.out.println(str1 == str2);
  9.         //
  10.         String str3 = new String("Java");
  11.         String str4 = new String("Java");
  12.         System.out.println(str3 == str4);
  13.     }
  14. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报

第一个变量str是创建了两个对象 一个是new String对象, 另一个对象是"x"字符串 ;
第二个变量 str 指向了一个对象,就是字符串对象,字符串存在于方法区的常量池;

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
String str = new String("x");创建了两个对象:new String();对象存在堆内存中,"x"存在缓冲区中,str指向new String(),new String()指向"x".
String str = "x"则是在缓冲区创建了"x"

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
在java开发中,只要通过new关键创建的对象,都会在堆内存中动态分配一块内存。
String str=new String("x");
当程序运行到该句代码时,会在堆内存中分配一块内存控件,并在栈内存中创建一个引用变量str。该变量存储的是刚才在堆内存中分配的内存控件首地址。

String str="x"; 当程序运行到该句代码时,会在内存的缓存区中创建一个x的字符串。而不是在堆内存中动态分配一块内存。

还有一点很重要,每次通过new创建的对象都会在堆内存中分配内存空间,
比如:
String str=new String("x");
String str=new String("x");
当程序执行完上面两句时,会在堆内存中创建两个x字符串对象,虽然他们的内容都相同,但他们却是不同的对象。你可以通过equal比较这两个对象的内容,还可以通过“==”比较两个对象首地址是否相同。

String str="x";
String str="x";

这只会创建一个x字符串,当执行到第二句的时候,系统首先会去内存缓存区查找是否已经存在x了,如果存在,则直接拿来用就ok,不需要重新创建。

希望对你有所帮助!

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
String str=new String("x")和String str="x"   指向的是两个不同内存地址。
你可以试一下,如果你用 system.out.println(s1==s2)输出的结果会是false。
如果你用system.out.println(s1.equals(s2))的话 输出的结果将会是true。
都是“x”  为什么结果会不一样呢。
因为前者“==”是判断两者在内存中的地址在内存中的地址是否相同。
而“equals”是在判断两者值是否相同。
懂否?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马