JavaScript-new String()和直接””有什么区别?

JavaScript-new String()和直接””有什么区别?

偏爱自由 发布于 2017-10-06 字数 0 浏览 1170 回复 9

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

夜无邪 2017-10-28 9 楼

这个要看你想理解的多深了。如果浅的话,平时随便用的话,基本没什么区别。如果深入的话,这就是一个比较复杂的东西,涉及到引用变量与对象的区别等等。
参考如下:http://rednaxelafx.iteye.com/blog/774673

归属感 2017-10-24 8 楼

String str = "a ";在栈中如果没有存放值为 "a "的地址,等同于:
String temp=new String( "a ");
String str=temp;

关于String str = "a "的内部工作。Java内部将此语句转化为以下几个步骤:
(1)先定义一个名为str的对String类的对象引用变量:String str;
(2)在栈中查找有没有存放值为 "a "的地址,如果没有,则开辟一个存放字面值为 "a "的地址,接着创建一个新的String类的对象o,并将o的字符串值指向这个地址,而且在栈中这个地址旁边记下这个引用的对象o。如果已经有了值为 "a "的地址,则查找对象o,并返回o的地址。
(3)将str指向对象o的地址。

使用String str = "a ";的方式,可以在一定程度上提高程序的运行速度,因为JVM会自动根据栈中数据的实际情况来决定是否有必要创建新对象。而对于String str = new String( "a ");的代码,则一概在堆中创建新对象,而不管其字符串值是否相等,是否有必要创建新对象,从而加重了程序的负担。

浮生未歇 2017-10-24 7 楼

脚本语言可以不定义直接用的,如果不涉及数据类型问题,就可以直接用""

瑾兮 2017-10-24 6 楼

new String();开辟内存 创建对象
new String("");开辟内存并创建对象的引用

清晨说ぺ晚安 2017-10-19 5 楼

javasript的话,有个最重要的区别:
如果你在之前定义了
function String()
{
...
}
那么new String()就不是创建系统默认的字符串类型了。
这个区别有时候会导致安全问题,比如:
var outPtr;
function String(x)
{
outPtr = x;
}
如果你的代码中使用了new String(),利用这个代码有可能构造一个跨域攻击。而使用""是安全的。

夜无邪 2017-10-18 4 楼

new是强制创建一个对象 直接="xx"是看以前有没有同样的字符串,有就直接引用,没有才创建(设计模式中的Flyweight)。

话说这些google、baidu都应该有不少啊。

浮生未歇 2017-10-16 3 楼

简单的区别在于类型不一致
var obj1 = new String("abc");//类型为object
var obj2 = "abc"; //类型为string

(obj1 == obj2) //true
(obj1 === obj2) //false

归属感 2017-10-15 2 楼

最主要的区别是存储位置不同和创建位置不同!
“”创建的字符串存储在方法区的常量池中,而new String()是在堆中创建一个对象并把这个对象的句柄返回给引用!“”是在编译时创建,new String()是在运行时创建!

灵芸 2017-10-07 1 楼

new String()是创建字符串的对象,“”是给字符串的声明赋值,赋值时值存储在常量池中,而new String()创建的对象是存储在堆区中,如果两者进行equals比较,都相等,但如果是通过“=”比较,则new String()的结果不相等,因为每次都会新创建对象。