应该说最大差别在GC.java的垃圾处理机制.
c的话你需要自己释放不在使用的内存,java不需要.
当前缓存中数据过多也会 内存溢出.
你的理解是对的.
int a=1;首先它会在栈中创建一个变量为a的引用,然后查找栈中是否有1这个值,如果没找到,就将1存放进来,然后将a指向1.
然后p = a了.就会先去栈中创建p,然后找a然后找a对应的1.始终找的都是那个1的内存.
你可以判断下.a==p.判断的是内存地址.
比较的始终是他们共同指向的那个1的内存地址.
所以a跟c里的指针不一样,是单独的两个对象,只不过他们最终指向的内存地址一样.
相对于C/C++的指针复杂程度,Java里就非常简单了,我可以给你解释一下。
简单来说,Java内存划分了栈内存和堆内存。
栈内存就相当于是一根只有一端开口的管子,先进后出。
堆内存就相当于一个大箱子,没有先后顺序之分。
栈内存存放Java基本数据类型、常量、以及Java对象的地址(关于基本数据类型你直接百度就知道,有八种,除了这八种之外的类型都是Java Object对象)。
堆内存存在的就是Java Object对象的数据。
如果你在创建八种基本数据类型的时候是直接在栈里分配一个地址用来存放,不占用堆内存的空间。
创建Java Object对象的时候是这样的,先在堆内存里分配一定的空间(暂用A来表示这段空间的起始地址,比如A=0x1000)用来存放这个对象的实际内容,然后在栈内存控件里分配一个空间,这个空间里存放的就是A。