先来一个C++思维的例子
/**
* 参数:二级指针,为原指针分配内存
* 返回:错误码
*/
int fun(void** pp){
//分配内存
*pp = malloc(sizeof(int64_t));
if(*pp==NULL)
return -1;
else
return 0;
}
void * a= NULL;
int retCode = fun(&a); //这里使用二级指针
if(retCode == 0) //0 表示成功, 非0 表示不成功,表示不同的错误码,可以通过错误码来做不同的处理
{
}
如果不为原来已分配内存的指针分配内存则可以不使用二级指针
再来一个同样功能的java的程序
Object fun(){
return new Object();
}
Object obj = fun();
if(obj !=null) //null 表示不成功,非null表示成功,并且值是需要的
{
}
你会发现C里面可以通过错误码来做不同的错误逻辑处理,java是通过try .. catch .. finally .. 来处理
这里要顺便说下,return 会产生几次拷贝的问题。
java 作为内存管理不敏感的语言,大量的临时对象,对于C++是不可以想象的。
就以上面java中的fun为例,C程序员的写法会是怎样的呢?
if(fun()!=NULL){// 如果只是为了比较的话,这么写会减少一次拷贝
}
对于C/C++程序员来说,了解CPU架构等一些硬件信息还是很重要的,所以他们写的代码通常会是这样的
int64_t a;
uint32_t b;
而java程序员因为建立在jvm虚拟机之上,所以对硬件的关注度就没有那么高了,一切都是jvm帮你透明掉了底层,也是因为jvm内存管理对于java程序员来说不是特别的重视。java 的写法
int a;
long a;
当然如果是对数据类型不敏感的语言。比方说JS
var a =0;
哈哈,当然你所写的每一行代码都是有人替你在负重前行啊!