有关java语法的一些细节(与c++比较)
与c++不同,java不支持方法参数的默认值设置,因此若有此需要,可以使用重载的方式去实现,如:
public class Test { public int func(int a, String b){ //TODO } public int func(){ return func(0,new String("defult")); } ... }
java中类型转换都是动态进行的,类似于c++的std::dynamic_cast。在进行不安全的转换时会抛出异常。
java中char默认占两个字节(默认编码格式为UTF-16)。
需注意,在JDK9之后,String的底层由char[]变为byte[],这样做是为了节省空间提升效率,即当String中只有Latin-1字符时,其按照1字节的规格进行分配内存,否则按照2字节分配。
java不支持运算符重载,在进行一些比较的时候应使用方法而非运算符。例如比较两个String内容是否相同应使用equals方法而非直接==,否则比较的是两者栈中的地址值。
java中所有对象都继承自顶级类Object,Object中存在一些通用方法可以被重写,如toString(),hashCode(),equals(),还有一些不可重写方法如wait,notify等和synchronized相关。
需注意,一般对POJO来说,需要重写toString(),hashCode(),equals(),重写toString是为了方便打印调试;重写hashCode是为了为了配合基于散列的集合一起正常运行,如HashSet,HashMap等;重写equals是为了方便根据需求判断对象是否相等,同时也避免了哈希冲突所带来的影响,即若两者撞了哈希,可以再通过equals去分辨。
持续记录中...