java基本类型都存在常量池吗
展开全部
1.在Java中你可以这样理解:所有的变量,包括基本类型和引用类型,它们的变量都是存放在栈中,栈中的每个变量都包含类型、名称、值这些内容,只不过基本类型变量的值为一个具体的值,而引用类型的变量的值为对象在堆中的地址。
2.常量池的存在是为了避免某个常量值被反复实例化,似乎主要用于字符串常量。例如:声明String a = "abc",『"abc"』是一个字符串常量,在声明过程中,会首先检查常量池中有没有『“abc”』这样的对象,如果没有则进行实例化并存入常量池,然后将引用(或者说句柄、地址)赋值给a;若在声明String b = “abc”,则b引用的是常量池中已存在的对象。上述情况下判断 a==b 的值为true,因为它们引用的是同一个对象。倘若声明String a = new String("abc"); String b = new String("abc"); ,则判断 a==b 的值为false,因为分别为a和b创建了新对象。
3.对于基本类型应该不会用到常量池,因为基本类型的值就存在栈中,在Java中对基本类型变量的运算、判断以及赋值都是对值的操作,没有对地址操作,例如:int a = 1; int b = 2; a = b; 这是将b的值赋给a,而不是a引用b;
4.关于常量池的生命周期我没验证过,不好说
2.常量池的存在是为了避免某个常量值被反复实例化,似乎主要用于字符串常量。例如:声明String a = "abc",『"abc"』是一个字符串常量,在声明过程中,会首先检查常量池中有没有『“abc”』这样的对象,如果没有则进行实例化并存入常量池,然后将引用(或者说句柄、地址)赋值给a;若在声明String b = “abc”,则b引用的是常量池中已存在的对象。上述情况下判断 a==b 的值为true,因为它们引用的是同一个对象。倘若声明String a = new String("abc"); String b = new String("abc"); ,则判断 a==b 的值为false,因为分别为a和b创建了新对象。
3.对于基本类型应该不会用到常量池,因为基本类型的值就存在栈中,在Java中对基本类型变量的运算、判断以及赋值都是对值的操作,没有对地址操作,例如:int a = 1; int b = 2; a = b; 这是将b的值赋给a,而不是a引用b;
4.关于常量池的生命周期我没验证过,不好说
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |