内存分配

再探C++Primer (4)指针、引用、对象和内存

北城以北 提交于 2019-12-09 13:22:10
###基本内置类型和复合类型# 基本内置类型就是算数类型和空类型,算数类型包括字符、整数、布尔值、浮点数,空类型是void; 复合类型指基于其他类型定义的类型,例如指针和引用。 ###引用# 引用就是给对象起的别名,通过声明对象时在对象标识符前加‘&’符号来定义引用类型。例如:int a=100;int &b=a;则可以通过对b的操作来操作变量a; 引用本身并不是对象,只是对象的别名,在内存中没有具体的存在; 引用只与其初始化的对象绑定在一起,初始化后不能将引用绑定到其他对象上; 引用只能绑定在对象上而不能绑定在表达式或字面值常量上。 ###指针# 指针同引用近似,提供了对其他对象的间接访问; 指针是一个独立的对象,允许对指针进行赋值和拷贝,定义指针后,根据计算机位数不同在内存中占据不同的大小,例如32位计算机/32位编译器中,指针大小是4字节; 指针存储的是对象在内存中的逻辑地址; 指针可以不被初始化也可以在生命周期内指向多个对象。 ####获取对象地址、利用指针访问对象# 指针一般要求指针类型同其所指对象严格匹配 int a = 10; int *b; b = &a; //通过取地址符获取变量a地址 int c = *b; //通过解引用符获取指针b所指变量 double *d = a; //错误,指针类型同所指对象不匹配 指针可以不被初始化,通过取地址符&可以获取对象地址

java数据类型简介,及其内存分配

不问归期 提交于 2019-12-03 20:11:44
经常碰到的面试题: java有哪些数据类型,String是不是基本数据类型,他们有什么区别? 相信有很多同学都能背出八大基本类型以及他们的区别,但是JVM是怎么对它们进行内存分配的呢? java的数据类型分为两类:基本类型和引用类型 基本类型:byte short,int,long,float,double,char,boolean 引用类型:类,接口,数组 String 不是基本类型,他是一个特殊的类,下面会讲到他的特殊地方。 基本类型,存放在栈中,存放的都是值,比如int a=3;这里变量a里存放的就是值,没有a存放的是引用这一说了,也没有字面值这一说。千万别被迷惑。 引用类型,对于一个类对象的引用,比如Person p=new Person(); 其中p存放在栈中,new Person();存放在堆中,这毫无异议。如果Person有基本类型,比如有属性 int age;那么age也跟随new Person();存放在堆中,千万别理解为 age存放在栈中,并不是所有的基本类型都存放在栈中,要根据上下文考虑。 对于String str="abc"; 它其实是先从常量池中寻找值为abc的字符串。如果找到就把引用地址返回给str。否则就会在常量池创建abc,没有从堆中寻找abc的说法。这也是一个陷阱把。 详细参考下面文章,回答的非常精彩: http://zangxt.iteye