1: java有指针,在java中称为 引用。 所谓的引用就是内存地址的值。拿到该引用就相当 于得到了该内存处的对象。
2: java中可以使用指针(我们称之为引用),但不能修改引用。
如C++中可以 进行pointer++; 在java中是错误的。(Integer,Float等包装类除外,因为java有自动封箱、解箱特性)。
这就好比:在java中可以坐飞机到指定的目的地,但是你不能开飞机(安全)。但是在C++中可以自己开飞机(操作飞机)--具有危险性。
为了安全。。。你不知道空指针有多么可怕,而且,指针的操作也是很复杂的,容易出错 而且,指针也不是什么必须的东西,只是更加快一点而已,而java 程序慢一点其实没什么影响,它主要关注的是(那个术语我一时想不起来怎么说了。。。)
你就理解为JAVA是C的优化版就成了.JAVA的所有概念源于C的最好设计方案.
C中用指针传变量,在子函数中可接收为值,也可接收为值的地址,这就造成了一定的编程难度, 容易产生错误, 所以在JAVA中只保留了子函数只能接收值的用法, 并改名为引用.
为了简化和安全
为了摒弃指针带来的风险(当然了,也就放弃了指针带来的效率)。
1、C/C++为什么有指针?这个很简单,程序都是在内存中运行的,只要有内存,就有内存地址,有地址,就必然有指针,只是C++对内存地址的访问做了语言的支持,称之为指针。
2、指针的优点?指针的优点很多,最核心的几个:
a、效率,指针就是内存的地址访问(虽然不是真正的物理地址,但是通过简单的映射就可以得到),性能非常好。
b、C/C++语言的需要,C/C++没有完善的面向对象支持,因此你不能声明一个Object类型的形参来接收所有类型的实参,因此C++只能通过万能指针void*来支持,C++中new出来的对象都是指针类型的(区别于直接声明一个类对象,Java中声明一个类的对象不实例化就是null,C/C++中对象类型可以像基本类型那样直接声明一个)。
3、指针的缺点?有优点自然就有缺点:
a、稳定问题,指针太灵活,不小心就容易出现指针访问越界之类的问题,虽然C/C++也推出了智能指针,但是总的来说,还是对程序员的要求非常高,非常容易出问题。
b、安全性问题。
3、Java认为,程序员应该花更多的精力在业务代码上,而不是语言相关的部分。所以Java的目标就是,尽量帮你完成不需要你关注的工作:指针管理、对象管理。。。。通过研究,Java认为,所有语言中需要使用指针才可以实现的代码,Java通过纯面向对象也可以给你支持。