java 指针(java为什么没有指针)

2025-06-23 18:00:01 :0

java 指针(java为什么没有指针)

各位老铁们,大家好,今天由我来为大家分享java 指针,以及java为什么没有指针的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

本文目录

java为什么没有指针

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

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

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

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中有没有指针

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

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 指针(java为什么没有指针)

本文编辑:admin

更多文章:


9377血饮龙纹官网(血饮龙纹(零氪满攻速)在哪里接代理)

9377血饮龙纹官网(血饮龙纹(零氪满攻速)在哪里接代理)

各位老铁们好,相信很多人对9377血饮龙纹官网都不是特别的了解,因此呢,今天就来为大家分享下关于9377血饮龙纹官网以及血饮龙纹(零氪满攻速)在哪里接代理的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文目录血饮龙纹(

2025年11月22日 09:15

tomcat环境变量配置win(tomcat配置环境变量tomcat配置环境变量win10)

tomcat环境变量配置win(tomcat配置环境变量tomcat配置环境变量win10)

本篇文章给大家谈谈tomcat环境变量配置win,以及tomcat配置环境变量tomcat配置环境变量win10对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了

2026年7月13日 11:00

infostation是什么意思(羽生结弦infostation是谁管理)

infostation是什么意思(羽生结弦infostation是谁管理)

大家好,infostation是什么意思相信很多的网友都不是很明白,包括羽生结弦infostation是谁管理也是一样,不过没有关系,接下来就来为大家分享关于infostation是什么意思和羽生结弦infostation是谁管理的一些知识

2026年9月13日 10:00

constructive翻译(描写人正面的词语英语)

constructive翻译(描写人正面的词语英语)

其实constructive翻译的问题并不复杂,但是又很多的朋友都不太了解描写人正面的词语英语,因此呢,今天小编就来为大家分享constructive翻译的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录描写人正面

2025年7月27日 11:00

javascript职业技能培训(Java培训完后的每个阶段价值)

javascript职业技能培训(Java培训完后的每个阶段价值)

各位老铁们,大家好,今天由我来为大家分享javascript职业技能培训,以及Java培训完后的每个阶段价值的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

2025年6月14日 06:15

上海php高级开发工程师招聘(土巴兔招聘怎么样家装人才的首选)

上海php高级开发工程师招聘(土巴兔招聘怎么样家装人才的首选)

本篇文章给大家谈谈上海php高级开发工程师招聘,以及土巴兔招聘怎么样家装人才的首选对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录土巴兔招聘怎么样家装人才的首选进入IT行业有哪些优势土巴兔招聘怎么样家装人才的首选  家装行业市

2026年5月21日 21:00

表单验证是什么(表单验证)

表单验证是什么(表单验证)

这篇文章给大家聊聊关于表单验证是什么,以及表单验证对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录表单验证关于表单验证表单验证《script》 function checkBox(){ var objects =

2025年7月2日 10:00

系统数据类型有哪些(计算机数据类型有哪些)

系统数据类型有哪些(计算机数据类型有哪些)

大家好,如果您还对系统数据类型有哪些不太了解,没有关系,今天就由本站为大家分享系统数据类型有哪些的知识,包括计算机数据类型有哪些的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录计算机数据类型有哪些MS SQL Se

2026年2月15日 16:00

恩钿女士月季优缺点(蒋恩钿的太仓恩钿月季园)

恩钿女士月季优缺点(蒋恩钿的太仓恩钿月季园)

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

2025年11月29日 06:45

js数组遍历删除元素(JS删除数组重复元素有哪些方法)

js数组遍历删除元素(JS删除数组重复元素有哪些方法)

其实js数组遍历删除元素的问题并不复杂,但是又很多的朋友都不太了解JS删除数组重复元素有哪些方法,因此呢,今天小编就来为大家分享js数组遍历删除元素的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录JS删除数组重复

2025年10月28日 23:30

sql2012数据库管理工具(microsoft sql server2012怎么开启啊)

sql2012数据库管理工具(microsoft sql server2012怎么开启啊)

本篇文章给大家谈谈sql2012数据库管理工具,以及microsoft sql server2012怎么开启啊对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收

2026年5月26日 10:30

各种表格样式大全软件(如何更换excel的表格样式)

各种表格样式大全软件(如何更换excel的表格样式)

“各种表格样式大全软件”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看各种表格样式大全软件(如何更换excel的表格样式)!本文目录如何更换excel的表格样式wps样式在哪里找wps2019可不可以像office一样导入模

2026年5月10日 22:30

qjson解析(通过get提交参数返回json数据怎么用php解析)

qjson解析(通过get提交参数返回json数据怎么用php解析)

这篇文章给大家聊聊关于qjson解析,以及通过get提交参数返回json数据怎么用php解析对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录通过get提交参数返回json数据怎么用php解析请教Qt如何解析出Json的数据js

2025年9月25日 15:45

停止使用以阶级斗志为纲的口号(十一届三中全会提出了什么方针)

停止使用以阶级斗志为纲的口号(十一届三中全会提出了什么方针)

各位老铁们好,相信很多人对停止使用以阶级斗志为纲的口号都不是特别的了解,因此呢,今天就来为大家分享下关于停止使用以阶级斗志为纲的口号以及十一届三中全会提出了什么方针的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文目录

2025年12月29日 00:45

sqlc对mysql支持(sqlalchemy 支持哪些数据库)

sqlc对mysql支持(sqlalchemy 支持哪些数据库)

大家好,关于sqlc对mysql支持很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于sqlalchemy 支持哪些数据库的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有

2026年8月19日 23:30

cp协议的主要功能是(合同cp与cs的区别)

cp协议的主要功能是(合同cp与cs的区别)

今天给各位分享合同cp与cs的区别的知识,其中也会对合同cp与cs的区别进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录合同cp与cs的区别tcp协议的主要功能是______TCP/IP协议的主要作用是什么tc

2025年10月6日 14:45

12333微信公众号为什么显示数据加载中(微信公众号办理社保卡上传证件显示一直在加载中什么原因)

12333微信公众号为什么显示数据加载中(微信公众号办理社保卡上传证件显示一直在加载中什么原因)

本篇文章给大家谈谈12333微信公众号为什么显示数据加载中,以及微信公众号办理社保卡上传证件显示一直在加载中什么原因对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要

2025年6月25日 12:15

characterize名词形式怎么写(by后面加动词原形吗)

characterize名词形式怎么写(by后面加动词原形吗)

大家好,如果您还对characterize名词形式怎么写不太了解,没有关系,今天就由本站为大家分享characterize名词形式怎么写的知识,包括by后面加动词原形吗的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目

2025年9月25日 16:15

creditcardnumberisinvalid翻译(invalidnumber是什么意思)

creditcardnumberisinvalid翻译(invalidnumber是什么意思)

“creditcardnumberisinvalid翻译”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看creditcardnumberisinvalid翻译(invalidnumber是什么意思)!本文目录invalidn

2026年5月31日 06:00

taught咋读(taught英语怎么说)

taught咋读(taught英语怎么说)

各位老铁们,大家好,今天由我来为大家分享taught咋读,以及taught英语怎么说的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!本文目录taught英语

2026年4月10日 22:00

近期文章

ilitate(imitate意思是)
2026-09-25 23:30:01
本站热文

electronics软件(labcenter electronics是什么软件)
2025-05-22 23:45:02 浏览:134
博客是微博吗(博客是微博吗)
2025-05-22 22:45:01 浏览:111
diversity and distribution(悬赏英语短文)
2025-05-23 16:15:02 浏览:107
ios软件开发前景(iOS就业前景怎么样)
2025-05-22 23:00:01 浏览:102
next month(有The next month这个单词吗,和 next month有什么区别)
2025-05-23 02:30:01 浏览:102
patron(patron是什么意思)
2025-05-23 10:30:02 浏览:95
标签列表

热门搜索