您的位置:首页 > 编程语言 > Java开发

java基础知识:栈内存和堆内存

2016-06-19 14:28 288 查看
1.person p=new person();//定义一个对象,且使用new关键字在堆内存中开辟空间。

声明 person p=null;//在栈内存中声明,只开辟了栈内存空间,对象无法使用。

实例化对象:new person();//在堆内存总开辟空间,方可使用。



 

总结就是:1.对象是保存在栈内存中,属性保存在堆内存中。

2.程序运行中有两个存储空间可用,一个是栈,是归属于进程本身的,另外一个是堆,所有进程共用的。

局部变量在声明周期为函数内部,其存储空间位于栈中。当进入函数时,会对根据局部变量需求,在栈上申请一段内存空间,供局部变量使用。当局部变量生命周期结束后,在栈上释放。

由于进程的栈空间是有限的,所以要避免申请占用空间过大的局部变量,以及避免函数嵌套层数过多。这些都可能引起栈空间不够导致程序崩溃。

总结:成员变量初始化后存放在堆内存中;局部变量 初始化后存在栈内存中。

class T

{ private int age  ;

public void show(){

age =23;//成员变量

String name=“23”;//局部变量

}

 

}

3.使用对象必须进过实例化(new 开辟堆内存空间)后才可使用。基本数据类型的默认值为0,引用数据类型的值为null;

4.案例一  string实例化的两种方式

1.直接赋值: String str="hello"; String str2="hello";

 



2.通过new 关键字开辟两个空间:String str=new String(“hello”);



5.案例二 string的两种比较方式

 1.一般基本输数据类型比较用“==”号,二引用数据类型比较,也可以用“==”,比较的是内存地址值;

2.“equals”比较的是两个对象的内容;

String str1=“hello”;

String str2=“hello”;

String str3=str2;

System.out.println(str1=str2);//f

System.out.println(str2=str3);//t,str2.str3指向了同一个地址

System.out.println(str1=str3);//f

 

 


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: