一、toString用法
所有的Java对象都有toString()方法
System.out.println(p)等同于System.out.println(p.toString()) (p为对象)
当直接打印该对象时,系统会输出“自我描述”信息,默认状态下时“类名+@+hashCode”值,并不是真正的自我描述信息,所以必要时,需要重写Object类的toSring方法
二、==和equals方法
当使用==来判断两个变量是否相等时,若是比较数值类型的变量,只需要值相等即可;若是两个引用类型变量,则它们必须指向同一个对象时才会返回true,==不可用于比较类型上没有父子关系的两个对象
String str1=new String("Hello");
String str2=new String("Hello"); //(str1==str2)为false 指向两个不同的对象 (str1.equals(str2))为true
System.out.println("Hello"==new ClassName()); //编译错误,java.lang.String与ClassName类没有继承关系
“hello”和new String("hello")不同,new String("hello")实际上一共创建了两个对象
三、类成员
使用static修饰的成员就是类成员,有类Field、类方法,静态初始化块,static不能修饰构造器
四、final修饰符
用final修饰的变量一旦获得初始值就不能被改变(必须由程序员显示的指定初始值)
如果final修饰的是一个引用变量,则只需要保证一直引用同一个对象即可(即地址不变),但可以改变这个对象的内容
被final修饰的方法不可被重写
被final修饰的类不可被继承
final修饰的类Field、实例Field能指定初始值的地方如下:
类Field:必须在静态初始化块或声明该Field时指定初始值。
实例Field:必须在非静态初始化块、声明该Field或构造器中指定初始值。