java 指针(java中有没有指针)

2024-06-21 07:44:01 26

java 指针(java中有没有指针)

本文目录

java中有没有指针

首先,指针用于指向某一块内存的地址,在C、C++中有明确的指针的概念,而在Java中,同样会有指向某一块内存地址的存在,但是不叫指针,在Java中称之为 引用(reference),你可以理解为智能指针。可以这么说Java其实处处皆为指针,但是我们开发人员却感觉不到而已。

刚刚有个问题忘记问了,JAVA有指针吗如果有,与C++的有没有区别

JAVA里没有指针,它与C++最大的区别就是省却了不安全的指针操作。C++的指针是继承C语言来的。

java里的指针和c++指针的区别

  1. 类型:引用其值为地址的数据元素,java封装了的地址,可以转成字符串查看,长度可以不必关心。C++指针是一个装地址的变量,长度一般是计算机字长,可以认为是个int。  2.所占内存: 引用声明时没有实体,不占空间。C++指针如果声明后会用到才会赋值,如果用不到不会分配内存。  3.类型转换:引用的类型转换,也可能不成功,抛异,或者IDE就不能通过。C++指针只是个内存地址,指向那里,对程序来说还都是一个地址,但可能所指的地址不是程序想要的!  4.初始值:引用初始值为java关键字null。C++指针是INT,如不初始化指针,那他的值就不是固定的了。  5.计算:引用是不可以计算的。C++指针是INT,所以他可以计算,所以经常用指针来代替数组下标。  6.控制:引用不可以计算,所以他只能在自己程序里,可以被控制。C++指针是内存地址,也可以计算,所以他有可能指向了一个不归自己程序使用的内存地址,对于其他程序来说是很危险的,对自己程序来说也是不容易被控制的。  7.内存泄露:JAVA引用不会产生内存泄露。C++指针是容易产生内存泄露的,所以程序员要小心使用,及时回收。  8.作为参数:JAVA的方法参数只是传值,引用做为参数使用时候,回给函数内引用的值的COPY,所以在函数内交换两个引用参数是没意义的,因为函数只交换的参数的COPY值,但在函数内改变一个引用参数的属性是有意义的,因为引用参数的COPY所引用的对象是和引用参数是同一个对象。C++指针做为参数给函数使用,实际上就是他所指的地址在被函数操作,所以函数内用指针参数的操作都将直接作用到指针所指向的地址(变量,对象,函数,等等)。  9.操作符和声明:java里用"."。C++指针用"-》" 用"*"声明指针。(似乎这条没什么用!)  10.本质:java中的引用和C++中的指针本质上都是想通过一个叫做引用或者指针的东西,找到要操作的目标(变量 对象等),方便在程序里操作。所不同的是JAVA的办法更安全,方便些,但没有了C++的灵活,高效。  java中的引用和C++中的指针,他们最好不要混在一起,也不要认为是一回事,只不过他们的作用有些相似,总叫人不自觉的对比。但在我们写JAVA程序的时候最好忘记C++的指针,写C++程序的时候,也不要老惦记着JAVA的引用。只要记得引用无大小,安全,不可计算,强转时要小心就好了。

请采纳。

java中指针操作是什么意思

众所周知,在java里面是没有指针的。那为何此处还要说java里面的“指针”呢?我们知道在C/C++中,指针是指向内存中的地址,该地址就是存储变量的值。该地址所存储的变量值是“公有”的,此处的“公有”是对于拥有该地址的变量而言。它们都可以访问该地址的内容,并且可对其就行修改,一经修改则所有指向该地址的变量值也将改变。那么在Java里面何来的指针?在java里面没有指针的定义。但是java里面的“指针”无处不在。下面将进行介绍。我们知道JAVA里面用的最多的就是对象,我们经常将一个对象传递给不同的变量,例如:Student s1 = new Student(); Student s2 = s1; 此时s1和s2是指向同一个对象的,也就是s1和s2引用同一个对象,我们知道java里面创建一个对象是存放在堆的,当我们new一个对象的时候其实是在堆中开辟了一个存储该对象的空间,返回是的存储该对象在堆中的地址,所以在java中我们所谓的对象引用就是指针,只是没有像C/C++中给出了一个明确的定义。java是为了避免指针带来的使用上的麻烦,所以就使用对象的引用来代替了指针。上面的例子中,当我们在s1中进行修改Student中的属性的时候,那么当s2取Student中属性的值的时候便是取得了s1修改后的值,这是因为s1和s2是指向堆中的同一块内容,所以只要其中一个变量修改了堆中的值,则其他的变量将取得堆中最后更新的值。所以我们可以知道,s2=s1并不是又在堆中创建了一块内存,而只是把一个对象的地址赋给了s2,此时还是只是创建了一个对像,而不是两个。在实际开发中会经常碰到这些,假设创建一个Map《String,Object》类型的对象,它的value是一个对象,而key是一个字符串,定义如下:class Student{ private String name; private int age; public void setAge(int age) { this.age = age; } public Student(String name) { this.name = name; } } Map《String,Student》 studentMap = new HashMap《String,Student》(); Student s1 = new Student("张三"); Student s2 = new Student("李四"); studentMap.put(s1.name,s1); studentMap.put(s2.name,s2); 此处是一个学生姓名对应了一个学生,所以此处的Map的key是学生姓名,value是一个学生对象。那么就是将一个Student对象的引用赋给了Map中key所对应的value,所以当程序在别处改变了s1/s2的值后,不必将s1和s2的信息更新到studentMap中,studentMap就会获得key所对应的value最新的值,例如:在程序的某处我们将s1的age修改成了“23”,我们不必将s1的最新信息更新到studentMap中,studentMap就会获得s1的最新值。这是因为已经将s1对象的引用赋给了studentMap中张三所对应的value,也就是将对象在堆中的地址赋给了value。所以只要s1一更新,studentMap就可以获得最新的值。 有时候这种情况会影响我们程序的执行和我们想想的会有偏差,当我们需要保存一个对象在某时刻的状态时,按照一般的理解是将此时的对象赋给一个变量来进行存储,但是在java里面这样是行不通的!因为这样直接将该对象赋给另一个变量只是将该对象的引用赋给了此变量,该变量的值并不能保持在此刻该对象的值,会随着程序的执行,该对象的改变而变化。所以达不到我们的目的。下面就举个例子来说明解决该现象:class Student{ private String name; private int age; public void setAge(int age) { this.age = age; } public Student(String name) { this.name = name; } public Student(Student student) { this.name = student.name; this.age = student.age; } } 上面还是student类,基本和上面一样,只是多添加了一个构造函数——Student(Student student),为什么要多加这样一个函数呢?这就是为了满足我们上面的需求(保存对象某个时刻下的状态),我们知道直接将一个对象赋给一个变量会存在对象的引用,不能保存对象某时刻的状态。同时也知道要想保存一个对象就要在堆中开辟一个空间,用于存放我们的对象。其实上面的需求可以看做当我们要保存某时刻下对象的状态,其实就是该对象的状态不会随以后对象的变化而变化,所以何不将当前某时刻下对象的状态属性全部都复制到一个新的对象中去!这样保存下来的属性就不会受以后对象的变化而变化了。就上面的例子,举例说明:Student s1 = new Student("王麻子"); s1.age=23; ........ //此时要保存s1此刻的状态 Student s2 = new Student(s1); 此时s1和s2就不是指向堆中的一个地址了,因为s2不是直接将s1赋给它的,而是通过new出来的!上面说了new可以在堆中开辟一个存储当前new的对象的空间。这种操作可以实现将s1中的状态全都转移到s2中,所以在值的方面看s2和s1此时是一样的,但是在堆中确实不一样的,s1!=s2,因为s1和s2的hashcode不一样!但是s1.name.equal(s2.name)==ture,s1.age=s2.age。这不就实现了保存某个对象某个时刻下的状态了吗?而切不会在受程序执行的影响! 到此已全部介绍完有关java“指针”,其实java“指针”就是对象的引用,而对象就是存放在堆中的。我们知道java中的内存分为堆内存(heap)和栈内存(stack)。堆就是用来存放对象的,而栈则是存放一些数据基本类型的值,如int,float,double,char.......。

Java语言中的指针到底是个什么东西

Java语言的一个优点就是取消了指针的概念,但也导致了许多程序员在编程中常常忽略了对象与引用的区别,本文会试图澄清这一概念。并且由于Java不能通过简单的赋值来解决对象复制的问题,在开发过程中,也常常要要应用clone()方法来复制对象。本文会让你了解什么是影子clone与深度clone,认识它们的区别、优点及缺点。看到这个标题,是不是有点困惑:Java语言明确说明取消了指针,因为指针往往是在带来方便的同时也是导致代码不安全的根源,同时也会使程序的变得非常复杂难以理解,滥用指针写成的代码不亚于使用早已臭名昭著的GOTO语句。Java放弃指针的概念绝对是极其明智的。但这只是在Java语言中没有明确的指针定义,实质上每一个new语句返回的都是一个指针的引用,只不过在大多时候Java中不用关心如何操作这个指针,更不用象在操作C++的指针那样胆战心惊。唯一要多多关心的是在给函数传递对象的时候。如下例程:package reference;c2.strBuff.append( change strBuff clone);改成下面这样:c2.str.substring(0,5);c2.strBuff.append( change strBuff clone);去掉了重新赋值的过程,c2.str也就不能有变化了,我们的把戏也就露馅了。但在编程过程中只调用c2.str.substring(0,5);语句是没有任何意义的。应该知道的是在Java中所有的基本数据类型都有一个相对应的类,象Integer类对应int类型,Double类对应double类型等等,这些类也与String类相同,都是不可以改变的类。也就是说,这些的类中的所有方法都是不能改变其自身的值的。这也让我们在编clone类的时候有了一个更多的选择。同时我们也可以把自己的类编成不可更改的类。***隐藏网址***

java中到底有没有指针

学过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中有没有指针”这个问题吗!

java为什么没有指针

1: java有指针,在java中称为 引用。 所谓的引用就是内存地址的值。拿到该引用就相当 于得到了该内存处的对象。2: java中可以使用指针(我们称之为引用),但不能修改引用。 如C++中可以 进行pointer++; 在java中是错误的。(Integer,Float等包装类除外,因为java有自动封箱、解箱特性)。 这就好比:在java中可以坐飞机到指定的目的地,但是你不能开飞机(安全)。但是在C++中可以自己开飞机(操作飞机)--具有危险性。

java 指针(java中有没有指针)

本文编辑:admin

本文相关文章:


java 指针(java中到底有没有指针)

java 指针(java中到底有没有指针)

其实java 指针的问题并不复杂,但是又很多的朋友都不太了解java中到底有没有指针,因此呢,今天小编就来为大家分享java 指针的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录java中到底有没有指针java为

2024年8月29日 08:15

更多文章:


html表格菜鸟教程(如何用html编写表格)

html表格菜鸟教程(如何用html编写表格)

本文目录如何用html编写表格html如何做表格如何用html编写表格楼主你好。html编写表格的方法有多种。最简单的就是用html标签《table》《/table》表格是由表头,表格,表行组成的。表头《tt》《/tt》表行《tr》《/tr

2023年12月8日 14:40

java课程设计图片查看器(用java编写一个图片浏览器)

java课程设计图片查看器(用java编写一个图片浏览器)

本文目录用java编写一个图片浏览器用java写的图片查看器运行时怎么没有图片显示出来丫java小程序图片查看器代码,实现放大、缩小、旋转功能java写的图片查看器不用graphic2D怎么实现图片在画布上旋转功能java图片查看器上一张

2024年7月21日 21:58

aspireone笔记本(Acer Aspire one超便携迷你笔记本电脑配置怎么样)

aspireone笔记本(Acer Aspire one超便携迷你笔记本电脑配置怎么样)

“aspireone笔记本”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看aspireone笔记本(Acer Aspire one超便携迷你笔记本电脑配置怎么样)!本文目录Acer Aspire one超便携迷你笔记本电脑配

2024年9月5日 07:25

一维数组初始化为0(c语言中定义一维数组如果想全部都赋值为0可以写成a[10]={}吗)

一维数组初始化为0(c语言中定义一维数组如果想全部都赋值为0可以写成a[10]={}吗)

本文目录c语言中定义一维数组如果想全部都赋值为0可以写成a[10]={}吗不是很懂你们C语言,一维数组可以怎么定义的吧为什么从0输出到8LabVIEW中数组常量的初始化,如将一维数组初始化为0~2048,将二维数组初始化为0000~1111

2024年7月23日 02:11

大一数据库知识点(Oracle数据库有哪些知识点,请讲全面,不用详细介绍每个知识点)

大一数据库知识点(Oracle数据库有哪些知识点,请讲全面,不用详细介绍每个知识点)

本文目录Oracle数据库有哪些知识点,请讲全面,不用详细介绍每个知识点数据库主要知识点 急急急!Oracle数据库有哪些知识点,请讲全面,不用详细介绍每个知识点Oracle的体系 Oracle的体系很庞大,要学习它,首先要了解O

2024年6月28日 09:04

用户   [yòng hù]什么意思近义词和反义词是什么英文翻译是什么?英语user和costomer作为用户的区别是什么

用户   [yòng hù]什么意思近义词和反义词是什么英文翻译是什么?英语user和costomer作为用户的区别是什么

大家好,如果您还对用户英文不太了解,没有关系,今天就由本站为大家分享用户英文的知识,包括用户   [yòng hù]什么意思近义词和反义词是什么英文翻译是什么的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录用户  

2024年7月27日 10:35

直方图和条形图的图片(如何区分直条图与直方图)

直方图和条形图的图片(如何区分直条图与直方图)

本文目录如何区分直条图与直方图如图是什么意思如何区分直条图与直方图直条图与直方图的区别:1、直方图 是用 “面积” 表示各组频数的多少,矩形的高度表示每一组的频数或频率,宽度则表示各组的组距,因此其高度与宽度均有意义;条形图是用条形的 “长

2024年7月22日 10:27

小白翻译成英语是smallwhite好还是littlewhite好?小白的英文名是什么

小白翻译成英语是smallwhite好还是littlewhite好?小白的英文名是什么

本文目录小白翻译成英语是smallwhite好还是littlewhite好小白的英文名是什么小白英文怎么说“小白”用英文怎么说“小白”英文的缩写又是什么小白的英文怎么写小白,用英语怎么写小白翻译成英语是smallwhite好还是little

2024年7月21日 16:12

swing节奏(像重金属、EDM、Hip-Hop、摇滚等劲爆音乐风格适合什么年龄段的人听)

swing节奏(像重金属、EDM、Hip-Hop、摇滚等劲爆音乐风格适合什么年龄段的人听)

本文目录像重金属、EDM、Hip-Hop、摇滚等劲爆音乐风格适合什么年龄段的人听尤克里里的shuffle节奏该怎么弹像重金属、EDM、Hip-Hop、摇滚等劲爆音乐风格适合什么年龄段的人听不一定非得要分年龄段吧!不是所有的中老年人都听着古老

2024年6月10日 09:10

cmake文件(cmake编译单/多文件)

cmake文件(cmake编译单/多文件)

大家好,关于cmake文件很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于cmake编译单/多文件的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!本文目录cma

2024年9月3日 21:40

好看的个人网站源码(求一可以做歌星个人网站的源码)

好看的个人网站源码(求一可以做歌星个人网站的源码)

大家好,今天小编来为大家解答以下的问题,关于好看的个人网站源码,求一可以做歌星个人网站的源码这个很多人还不知道,现在让我们一起来看看吧!本文目录求一可以做歌星个人网站的源码个人网站日记源码求一套漂亮的asp个人网站或博客系统求一可以做歌星个

2024年8月12日 21:25

ios软件开发简介(ios开发是什么)

ios软件开发简介(ios开发是什么)

本文目录ios开发是什么ios系统是基于什么环境下开发的用什么语言什么工具编写该系统有何优缺点ios开发是什么iOS开发就是开发运行在搭载iOS系统上的应用或者游戏软件,也就是可以开发一些运行在iPhone上的软件,比如手机QQ、微博或者游

2024年7月14日 22:07

手机网页翻译日文(我上日本的网站,都是日文看不明白,怎么把他网站的内容直接翻译成中文)

手机网页翻译日文(我上日本的网站,都是日文看不明白,怎么把他网站的内容直接翻译成中文)

各位老铁们,大家好,今天由我来为大家分享手机网页翻译日文,以及我上日本的网站,都是日文看不明白,怎么把他网站的内容直接翻译成中文的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了

2024年8月22日 19:00

微服务架构做cs架构(cs架构为啥后端安装前端也要安装)

微服务架构做cs架构(cs架构为啥后端安装前端也要安装)

本文目录cs架构为啥后端安装前端也要安装BC和CS架构是什么有何区别优缺点是啥跪求答案各位软件或者计算机高手帮帮我cs和bs架构的区别关于cs架构,bs架构,云计算后端开发从零起步【1】CS\BS架构bs架构如何转换为cs架构cs架构为啥后

2024年7月20日 04:06

电脑ip地址查询方法cmd(cmd怎么查看电脑ip地址)

电脑ip地址查询方法cmd(cmd怎么查看电脑ip地址)

本文目录cmd怎么查看电脑ip地址电脑cmd怎么查ip地址cmd怎么查看电脑ip地址很多人不会用这个方法查,新手要学会,不要有抵触心理就可以了,查起来比其它方法容易多了。快捷键win+r,或者点击电脑左下角开始,运行。然后输入cmd,这个就

2023年5月26日 10:20

keep back(关于keep的短语【初中】)

keep back(关于keep的短语【初中】)

本文目录关于keep的短语【初中】请问keep back和keep from 都有阻止的意思,有什么区别吗keep back是什么意思keep+副词吗keepback的意思keepback的意思是什么“keep back”是什么意思keep

2024年6月28日 07:17

linux命令行界面怎么退出(linux中head-v怎么退出)

linux命令行界面怎么退出(linux中head-v怎么退出)

本文目录linux中head-v怎么退出在linux的终端怎么退出python命令行linux中head-v怎么退出linux中head-v可以通过按下键盘上的Ctrl和C键来退出。根据查询相关公开信息显示,Ctrl和C组合键可以强制终止当

2024年4月10日 03:15

jquery修改css属性值(jquery修改css问题)

jquery修改css属性值(jquery修改css问题)

各位老铁们好,相信很多人对jquery修改css属性值都不是特别的了解,因此呢,今天就来为大家分享下关于jquery修改css属性值以及jquery修改css问题的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文目录j

2024年7月30日 08:50

站长之家域名(查询域名所有权属于自己的方法)

站长之家域名(查询域名所有权属于自己的方法)

本文目录查询域名所有权属于自己的方法站长之家怎么查询关键词在百度的排名如何知道自己网站在某个关键词搜索中,在百度搜索排名的位置如何查询一个网站下的所有的二级域名知道IP地址如何查询域名(网站的域名)查询域名所有权属于自己的方法查询域名所有权

2024年7月3日 21:50

warning是什么意思中文(电脑中WARNING:Battery is low是啥意思)

warning是什么意思中文(电脑中WARNING:Battery is low是啥意思)

本文目录电脑中WARNING:Battery is low是啥意思warning是什么牌子电脑中WARNING:Battery is low是啥意思电脑中WARNING:Battery is low翻译成中文的意思为:警告:电池电量低!ba

2024年7月13日 15:50

近期文章

beside(“beside”怎么读)
2024-09-28 14:41:21
本站热文

iphone vpn设置(ios设置vpn快捷开关)
2024-07-22 15:01:12 浏览:2334
windows12正式版下载(操作系统Windows Server 2012 R2,在哪能下载到,公司用的)
2024-07-20 17:26:53 浏览:1731
java安装教程(win10如何安装JAVA)
2024-07-19 19:55:49 浏览:1156
client mfc application未响应(每次进cf就提示client MFC Application未响应该怎么办啊!急急急)
2024-07-20 11:15:58 浏览:1152
标签列表

热门搜索