java值和地址值传递字符串常量池的理解

Posted 勇往直前

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java值和地址值传递字符串常量池的理解相关的知识,希望对你有一定的参考价值。

#java值和地址值传递的理解:

 - 基本数据类型和基本数据类型的封装类都是:值传递 
  * 形式参数的改变不会影响实际参数的改变(相当于将值复制一份传递给形参,自身没做任何改变) 
 - 引用数据类型都是 地址值传递
  * 形式参数的改变会影响实际参数的改变(将地址值赋值给形参,形参就可以指向实参所指向的地址,
   即形参也可以操作实参指向地址的数据了)
 
#注意:String是个特例(当作基本类型处理)
  
 - 分析:从String类的源码可以知道,String相当于是char[]的封装类,即具有char类型的性质。   
       
             String str1="abc";//直接新建的字符串(引用值在常量池中)
             String str2=new String("a");//通过new产生的字符串
             // 以上两种方式都是属于值传递,而不是地址值传递
 
#常量池技术:
 - 方便快捷的创建某些对象为出现的,常量池技术其实就是一个内存空间,
  *         
             //就是在常量池中创建的,
              String str="ab";
             //在堆内存中创建的
             String str=new String("ab");--2
             其中第二句代码分为两种情况
               1.常量池如果有"ab",就直接从常量池中获取"ab",就只需要创建一次对象
               2.常量池若没有"ab",首先在常量池创建"ab",然后在堆内存再创建一次对象


#8基本类型的包装类和对象池

 - Byte,Short,Integer,Long,Character,Boolean实现了常量池技术,
 - Float,Double浮点型没有实现常量池技术。
 - Byte,Short,Integer,Long,Character这5种包装类也只是在对应值
  小于127时(存在缓存)才可以使用对象池。                    


































以上是关于java值和地址值传递字符串常量池的理解的主要内容,如果未能解决你的问题,请参考以下文章

Java运行时常量池是啥?

java 常量池

java常量池共享是啥意思?每个类都有自己的一个常量池吗?

好好说说Java中的常量池之Class常量池

java---堆栈常量池的存储数据

JAVA中关于String类型的创建和字符串常量池的问题