java 不支持默认参数。(避免与重载混淆。)

java 类没有析构函数。delete不是关键字。(垃圾自动回收机制)

java 不支持操作符重载。所以对象比较只能老老实实实现comparable接口,然后用compareTo去比较了。想要用<去比较java对象是不可能的。

java 局部变量(方法内变量)不支持static。

java 不支持泛型数组。原因是擦除。

java 泛型用擦除实现,不支持调用泛型类型方法。

java 类不支持多重继承。接口可以。

java 不支持引用符号(&),虽然它对象是按引用传递,但也只是如此而已。普通类型不可声明为引用。(引用可以用数组来模拟)

java 不支持指针。

java String不是以'\0'结束。C是,C++ char *[]表示的字符串也是,但C++ std::string不是以'\0'结束。事实上,String封装了length, 就没有必要再以'\0'这种实际中容易引起混淆的标志结尾了。

java 不支持方法默认参数,想要模拟C++默认参数效果,可用方法overloading实现。

java boolean不可转化为其它基本数据类型。其他类型也不能转化为boolean。强制转型也不行。这其实是好事。因为这意味着在if,while等判断式中,除了boolean,其它基本类型都会出错。也规避了==和=引起的错误。

java char默认2字节。C++是1字节。这对处理中文有极大好处。虽然保存UTF-8还是不够......

java 没有sizeof()操作符。因为不需要。所有基本类型都是平台统一。当然boolean除外。

java 没有unsigned int等类型。想声明无符号整数,是不可能的。不过也不是很必要,毕竟现在内存大了,少一个bit也没什么。

java 中ArrayList<Long> arraylist = new ArrayList<Long>(10),会分配空间,但size不变,所以调用arraylist.set(1,0)会越界.....C++不会。但提前分配空间是有意义的,只是set会检查size,所以悲剧发生了.....

而这些C++都支持。

待续。