常量设计
- 一种不会修改的变量
- java没有const关键字
- java中的常量是public static final ,建议变量名全部大写,以连字符相连
代码如下
package 常量设计;
public class App {
public static void main(String [] args)
{
Constants obj1=new Constants();
System.out.println(obj1.pi+obj1.name);
}
}
package 常量设计;
public class Constants {
public static final double pi=3.14;
public static final String name="Tom";
}
接口中特殊的常量
接口中定义的变量默认是常量
package 常量设计;
public class Constants implements Text{
public static final double pi=3.14;
public static final String name="Tom";
void pr()
{
a=20;//报错,说a是不能修改的
}
}
package 常量设计;
public interface Text {
int a=15;
}
常量池
- Java中为很多的基本类型的包装类都建立了常量池。
- 常量池:相同的值只存储一份,节省内存,共享访问
- Float 与Double没有常量池,因为他们对于精度要求太高
- 常量化只会在栈上实现,而new出来的对象放在堆内存上,不会常量化。
package 常量设计;
public class App {
public static void main(String [] args)
{
/*Constants obj1=new Constants();
System.out.println(obj1.pi+obj1.name);*/
String str="hello";
String str1="hello";
String str2="hell"+"o";
System.out.println(str1==str);//true
System.out.println(str1==str2);//true
System.out.println(str==str2);//true
}
}
看下面的代码
Integer val1=127;
Integer val2=127;
Integer val3=128;
Integer val4=128;
System.out.println(val1==val2);//true
System.out.println(val3==val4);//false
//对象双等号是比较指针是否指向同一个东西
Java中 Short Long Integer的常量池都在-128-127之间。
看下面关于new和正常创建的例子
int i1=10;
Integer i2=10;//自动装箱
System.out.println(i1==i2);//基本类型和包装类型比较,包装类型自动拆箱
Integer i3=new Integer(10);
System.out.println(i1==i3);//虽然是new出来的,但是依旧自动拆箱
System.out.println(i2==i3);//false两个指针不是一个地方
总结
- Java中的常量 static 与final
- Java接口中的变量都是常量
- 对象生成有两种:常量创建和new
- java为Boolean Byte Short Character IntegerLong String建立了常量池,没有Float Double
- java编译器会优化已经确定的变量