String数据类型在内存是一个什么机制?
一直想不通的问题,它是一个引用类型,在,可是它进行传递是可传递是一个副本,真的不能理解,
------解决方案--------------------http://topic.csdn.net/u/20080929/02/4E0EF626-98EE-4D6D-96ED-FE40AFE8290B.html
------解决方案--------------------楼主其实是对引用类型在java中内部存储方式不太了解,
java中的基础类型直接存储在栈中,复合类型采用引用类型,把引用也存储在栈中,而对应的对象存储在堆中。
因此java中把内存分堆内存和栈内存,在函数中定义的一些基本类型或引用都分配栈内存。堆内存用来存放由new创建的对象和数组,或是static(类装载信息)。在堆中分配的内存,由jvm的gc管理。程序只能控制引用的生存期,对象的生存期是jvm控制的。
在java应用程序中,当对象的引用是传递方法一个参数时,传递的时该引用的一个副本,(按值传递)。而
非引用本身,调用方法的对象引用和副本都是指向同一个对象。
------解决方案--------------------八个基本数据类型的包装类和String类型一个9个类都有一个对象池的(Object Pool),也就是缓存了!
因为这几个对象经常用,为了避免经常使用消耗性能,所有采用了缓存机制,
当然你也可以为自己的对象采用缓存机制!
------解决方案--------------------