java中到底有没有指针


<span class="tags-box artic-tag-box">
							<span class="label">标签:</span>
															<a data-track-click="{"mod":"popu_626","con":"java"}" class="tag-link" href="http://so.csdn.net/so/search/s.do?q=java&t=blog" target="_blank">java																</a><a data-track-click="{"mod":"popu_626","con":"指针"}" class="tag-link" href="http://so.csdn.net/so/search/s.do?q=指针&t=blog" target="_blank">指针																</a><a data-track-click="{"mod":"popu_626","con":"c++"}" class="tag-link" href="http://so.csdn.net/so/search/s.do?q=c++&t=blog" target="_blank">c++																</a><a data-track-click="{"mod":"popu_626","con":"内存"}" class="tag-link" href="http://so.csdn.net/so/search/s.do?q=内存&t=blog" target="_blank">内存																</a>
						<span class="article_info_click">更多</span></span>
																				<div class="tags-box space">
							<span class="label">个人分类:</span>
															<a class="tag-link" href="https://blog.csdn.net/fanflame4444/article/category/2196611" target="_blank">java基础																</a>
						</div>
																							</div>
			<div class="operating">
													</div>
		</div>
	</div>
</div>
<article class="baidu_pl">
	<div id="article_content" class="article_content clearfix csdn-tracking-statistics" data-pid="blog" data-mod="popu_307" data-dsm="post">
							            <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-2c6a5211c9.css">
					<div class="htmledit_views" >


学过c/c++,然后学java的人往往心中有此纠结,java中到底有没有指针?
如果一定要在是或否里选择一个,OK,java中没有指针。

那么,java中的引用(reference)和c/c++中的指针(如无特别说明,后文指针均指c/c++中的指针)究竟有着什么样纠葛不清的关系呢?

在开始之前先说一下c/c++的引用,它跟java的引用完全不是一个东西,c/c++的引用是同一块内存的不同名字。而java的引用是指向一个对象,引用本身也占用了内存。

首先,列举一下能对指针进行的一些常见操作:
1、指向一个对象,如 Person *p = new Person….;int *iv = new int….
2、对指针所指的对象进行操作:P->getAge();            (*p).getAge();
3、获取存储在指针中的地址值。
4、将指针指向另外一个对象:Person *p1 = new Person…; p = p1;    但,不可以*p = p1这样来赋值。
5、删除new的空间,delete p1;
6、其它诸多操作

这么多已经足够了,接下来看看java引用能做什么操作。
a、指向一个对象,如Person p = new Person…
b、调用对象的方法,p.getAge();
c、指向另外一个对象,Person p1 = new Person…; p = p1;
OK,就这么多了。

对于a和1,他们的功能是类似的,但java引用无法指向一个基本变量。。
对于b,java引用和指针就不同了,在这点上,java reference更像是解引用(dereference)了的指针;或者说java中的.操作符某种程度上等价于指针的->操作符,如果是这样种解释的话,我们无法再对java的reference解引用了。
对c和4,是类同的。

除此,我们无法获取java引用存的地址,我们不能delete,还有很多……

综上,窃以为java的引用可以看成是一个功能受限的指针(或者说被阉割的指针)。另一方面,功能如此受限,它还能叫指针吗?了解了指针和java引用的区别与联系,还需要纠结“java中有没有指针”这个问题吗!

<script>
					(function(){
						function setArticleH(btnReadmore,posi){
							var winH = $(window).height();
							var articleBox = $("div.article_content");
							var artH = articleBox.height();
							if(artH > winH*posi){
								articleBox.css({
									'height':winH*posi+'px',
									'overflow':'hidden'
								})
								btnReadmore.click(function(){
									if(typeof window.localStorage === "object" && typeof window.csdn.anonymousUserLimit === "object"){
										if(!window.csdn.anonymousUserLimit.judgment()){
											window.csdn.anonymousUserLimit.Jumplogin();
											return false;
										}else if(!currentUserName){
											window.csdn.anonymousUserLimit.updata();
										}
									}
									
									articleBox.removeAttr("style");
									$(this).parent().remove();
								})
							}else{
								btnReadmore.parent().remove();
							}
						}
						var btnReadmore = $("#btn-readmore");
						if(btnReadmore.length>0){
							if(currentUserName){
								setArticleH(btnReadmore,3);
							}else{
								setArticleH(btnReadmore,1.2);
							}
						}
					})()
				</script>
				</article>