有关java语法的一些细节(与c++比较)

Explosion! / 2023-07-27 / 原文

与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去分辨。

 

 

 

持续记录中...