new在堆中的string和栈中的string引用指向内存不同
来源:互联网 发布:光线投射算法原理 编辑:程序博客网 时间:2024/05/21 18:50
String str1 = new String("abc");
String str2 = "abc";
System.out.println(str1==str2); //false
创建了两个引用。创建了两个对象。两个引用分别指向不同的两个对象。
String str1 = "abc";
String str2 = new String("abc");
System.out.println(str1==str2); //false
创建了两个引用。创建了两个对象。两个引用分别指向不同的两个对象。 以上两段代码说明,只要是用new()来新建对象的,都会在堆中创建,而且其字符串是单独存值的,即使与栈中的数据相同,也不会与栈中的数据共享。
(1)我们在使用诸如String str = "abc";的格式定义类时,总是想当然地认为,我们创建了String类的对象str。担心陷阱!对象可能并没有被创建!唯一可以肯定的是,指向 String类的引用被创建了。至于这个引用到底是否指向了一个新的对象,必须根据上下文来考虑,除非你通过new()方法来显要地创建一个新的对象。因此,更为准确的说法是,我们创建了一个指向String类的对象的引用变量str,这个对象引用变量指向了某个值为"abc"的String类。清醒地认识到这一点对排除程序中难以发现的bug是很有帮助的。(2)使用String str = "abc";的方式,可以在一定程度上提高程序的运行速度,因为JVM会自动根据栈中数据的实际情况来决定是否有必要创建新对象。而对于String str = new String("abc");的代码,则一概在堆中创建新对象,而不管其字符串值是否相等,是否有必要创建新对象,从而加重了程序的负担。这个思想应该是享元模式的思想,但JDK的内部在这里实现是否应用了这个模式,不得而知。(3)当比较包装类里面的数值是否相等时,用equals()方法;当测试两个包装类的引用是否指向同一个对象时,用==。(4)由于String类的immutable性质,当String变量需要经常变换其值时,应该考虑使用StringBuffer类,以提高程序效率。
- new在堆中的string和栈中的string引用指向内存不同
- Java中的String str="abc"; String str=new String("abc");和String str = new String();的区别以及==与equals()的不同。
- Java中的String str="abc"; String str=new String("abc");和String str = new String();的区别以及==与equals()的不同。
- VS2015使用小技巧 查看值类型int与引用类型string在栈中的地址、堆中的地址
- 解析String s="a" 和 String s1=new String("a")生成时,内存中的变化
- String 堆内存和栈内存
- String 堆内存和栈内存
- Java中堆内存和栈内存_在建立一个对象时从两个地方都分配内存,在堆中分配的内存实际建立这个对象,而在堆栈中分配的内存只是一个指向这个堆对象的指针(引用)。修改栈指针就可以把栈中的内容销毁.这样最快
- JAVA中的堆栈问题以及String和new String
- JAVA中的堆栈问题以及String和new String
- java 中的String 和new String 的区别
- 关于string.substring() string.slice() splice()方法 在js和c#中的不同
- String类中的堆区和栈区(转)
- 在JVM中的String内存分配
- String内存中的详解!!!
- 内存中的堆和栈
- 内存中的堆和栈
- 内存中的堆和栈
- Project Euler problem 63
- 如何用C语言获得本机IP地址?(获取一个ip或者获取所有ip)
- 以 HTML5 开发 Mobile Web App
- Linux 多线程应用中如何编写安全的信号处理函数
- 编程语言学习的积累沉淀(搜集+转载)
- new在堆中的string和栈中的string引用指向内存不同
- 检查本机是否被远程监控
- [解决方案]java.lang.RuntimeException:Unable to instantiate activity ComponentInfo
- JAVA反射机制
- 查找出现次数超过一半的数
- Android中的多媒体显示之图片缩放
- 黑马程序员----浅谈java中的多态
- D3D9 Samples(13)--EffectParam
- opencv学习笔记2: SURF特征提取