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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 秦大忠 中级黑马   /  2013-8-24 16:14  /  1506 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我们知道String是一个类,如果是类的话,为什么一直没有看到使用new来使用呢,而是直接赋值的呢,比如String name = "秦大忠";

4 个回复

倒序浏览
String name="小王";创建了一个对象
String name=new String("小王");创建了两个对象   一个是name   一个是"小王"
它俩作用是一样的,都创建了name并赋值为   小王
但是用new String()  很麻烦,在开发当中,要求的是代码要简洁。易懂,方便日后维护,有简单的方法,就用简单的方法何必要用麻烦的呢?
回复 使用道具 举报
String 是一个特殊的包装类数据,他有2种方式,一种是你说的这种String name="",一种是new String(),这两种的区别是:第一种存储在ram的栈内存中,第二种将对象存储在堆内存中,对象引用存在栈中(然后把堆地址赋予引用变量),每次用new后都会产生一个新的对内存(无论对象中内容是否相同),而直接String 出来的变量无论你创建多少次,只要内容相同,在栈内存中只会产生一个,只不过将栈内存变量指向同一栈位置,所以,采用第一种的好处是:节约内存,提高程序运行速度
回复 使用道具 举报
小时晚er 发表于 2013-8-24 16:52
String name="小王";创建了一个对象
String name=new String("小王");创建了两个对象   一个是name   一个 ...

感觉用内存解释会好点,String name=“小王” 是在栈内存中创建一个变量为name,他的内容为“小王”,通过String 直接创建的如果内容相同(比如String name2=“小王”,String name3=“小王”,那么在栈内存中仅会出现一块栈内存”小王“,而name2,name3,name都指向这块内存,即相同内容只创建一次)

String name=new String(“小王”),在栈内存中创建一个对象的引用变量:name,同时在堆内存中创建一个堆内存,内容为“小王”,然后将这块堆内存的地址赋给对象引用变量name,此时name指向堆内存“小王”,你String nameXX=new String(”小王")多少次就会在堆内存中创建多少个堆内存块
回复 使用道具 举报
谢谢你们啊...
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马