一、JAVA数据存储类型:栈和堆
好处:1 栈:优点:数据可以共享,存取速度快仅次于CPU中寄存器,
缺点:存在栈中的数据大小和生命周期必须是固定的,缺乏灵活性
2 堆:好处:可以动态分配内存大小,生存期不必告诉编译器,垃圾回收器自动回收不适用的数据
缺点:由于动态分配内存使得存取速度快 ;
二、数据的存放
基本数据类型存放在栈中:
基本数据类型如:int, short, long, byte, float, double, boolean, char;他们大小固定,生存期可知,
出于追求速度,就存在栈中了
堆中存放:对象,类以及应用等信息
如:Integer,String,Double等Java用new()语句来显示告诉编译器,在运行时才根据需要动态创建,
因此比较灵活,但缺点占用更多的时间。
三、理解栈数据的共享:
如:int a=3; int b=3 ;
程序执行:1 创建a的一个引用, 2查找是否有值为3的地址,如果有则讲a指向3的地址,没有则创建一个存放数值为3的地址,然后指向即可
然后处理 int b=3 ; 在创建完b的引用变量后,由于在栈中已经有3这个数值,便将b直接指向3的地址。这样,就出现了a与b同时均指向3的情况
引用变量存放在栈中,直接指向堆中内存区域的首地址。
四、String包装类的理解
这种类,既可以用String str = new String("abc");的形式来创建,也可以 String str = "abc"
1 理解String str = "abc" ,这种形式和基础数据类型存储很相似,
先在栈中创建一个对String类的对象引用变量str,然后查找栈中有没有存放"abc",如果没有,则将"abc"存放进栈,并令str指向”abc”,如果已经有”abc” 则直接令str指向“abc”。
2 中用new()来新建对象的,它会在存放于堆中。每调用一次就会创建一个新的对象在堆中。
结论:
1 因此用第二种方式创建多个”abc”字符串,在内存中其实只存在一个对象而已. 这种写法有利与节省内存空间.
同时它可以在一定程度上提高程序的运行速度,因为JVM会自动根据栈中数据的实际情况来决定是否有必要创建新对象。
2 对于String str = new String("abc");的代码,则一概在堆中创建新对象,而不管其字符串值是否相等,是否有必要创建新对象,从而加重了程序的负担。
另一方面, 要注意: 我们在使用诸如String str = "abc";的格式定义类时,总是想当然地认为,创建了String类的对象str。
担心陷阱!对象可能并没有被创建!而可能只是指向一个先前已经创建的对象。只有通过new()方法才能保证每次都创建一个新的对象。
3 由于String类的immutable性质,当String变量需要经常变换其值时,应该考虑使用StringBuffer类,以提高程序效率。
576

被折叠的 条评论
为什么被折叠?



