我想和你们说说java和C++___C加加

头痛头痛之一:

java里面,本质上来说,一个类是一个程序员定义的类型,类是一种引用类型(reference type),这意味着该类类型的变量都可以引用该类的一个实例。从表面上,对象引用变量中似乎存放了一个对象,但事实上,它只是包含了对该对象的引用。严格来讲,对象引用变量和对象是不同的,对象(new Person()),对象引用变量(Person p)。但大多数情况下,这种差异是可以忽略的。因此,可以简单地说p是一个Person对象,而不用冗长地描述说,p是一个包含对Person对象引用的变量。-----java基础篇P278

所以,Person p;   p.a = 2; 这样是不行的,因为这个时候p还没指向任何内存。是null

所以需要Person p = new Person();

相反,C++直接 Person p; 即可调用p.a = 2;

头痛头痛之二:

java里面的方法,

    public void fuck(final StringBuilder str) {
        str.append("haha");
    }

这样的final只是说,不能改变str,也就是str不能指向其他地方,还是可以修改它指向的内容的。比如上面是ok的,会修改的

但是C++

void fun(const char * str) 

就已经表明,str的内容是不可变的,至于指向,本来就是值拷贝,改变了对我影响不到的。只是在函数中临时改变

 再比如

void fun(char * const str) {
    str[0] = '0';
}

指针常量,表明这个指针是一个常量,不可以再改变指向了,但是这个时候还是可以修改它指向的那块内存的值的。

注意:这个时候那块内存需要存在,如果你的是char * str = "liuweiming",这样它一更改还是会报错的,因为不能更改字符串常量

字符串常量保存在代码区

所以很大的区别就是final string str,表明的和const char * str不同

void fun(char * const str) {    str[0] = '0';}

头痛头痛之三、

java中的类,默认类型,也就是什么都不写,也不算private的,只是说明其是包私有而已,同个包的还是能访问。

C++/C#中的类,默认类型,是private的,就是什么都不写,就不能访问了。

原文地址:https://www.cnblogs.com/liuweimingcprogram/p/7815933.html