Java和C++最显著的区别体现在对象的处理上。Java中,对象变量在内部被当作指针处理。Java文献指出将对象变量作为引用,不过它们与C++中的引用并不完全相同。所谓引用,就是一个介于指针和变量之间的东西。
---------正是有这个本质的区别,才会很多JAVA,OK 的代码,再c++里面确实错误的. ------java 的引用概念和 c++ 引用不是同一个意思。 java 的引用和c++ 的指针,比较类似。
- 在 C++ 的声明中,一个类名可以用来声明一个此类对象的值. Java 里没办法做到这点. 在Java里对象不是值. 在 Java 的声明中,一个类名声明的是对此类的一个对象的引用. 而在 C++ 里与之等价的做法是用 "*" 来声明一个指针.
- 在 C++ 里,"."操作符将一个对象作为一个左操作参数来访问这个对象的成员. 因为对象在 Java 里不是值,所有的对象都通过引用来访问,刚才的做法在 Java 里是无法实现的. 在 Java 里,"." 操作符是将一个对象的引用作为左操作参数来访问这个对象的成员.在C++中和这种做法等价的是 "->".
例子:
c++ : string a = null--error 错误发生的原因是 string源码的默认构造函数不支持。 如果string 默认构造函数支持,其实也是可以的(因为他编译是OK的,说明语法没有问题,运行的时候报错,说明构造函数不支持而已)
string 默认构造函数源码:
__CLR_OR_THIS_CALL basic_string(const _Elem *_Ptr)
: _Mybase()
{// construct from [_Ptr, <null>)
_Tidy();
assign(_Ptr); // 因为_Ptr 是 NULL 这里回出错
}
string* a =null ---ok 指针可以为空
java String a=null ----ok Java中,对象变量在内部被当作指针处理
参考文献:
http://zh.wikipedia.org/wiki/Java%E5%92%8CC%2B%2B%E7%9A%84%E5%B0%8D%E7%85%A7
http://bbs.csdn.net/topics/190137939