导航:首页 > 编程语言 > java引用指针的区别

java引用指针的区别

发布时间:2023-11-29 02:02:46

java的基本数据类型和引用数据类型的区别

一、作用的不同

1、引用类型一般都是通过new关键字创建对象,然后把这个对象赋予给相应的变量,最常用的引用类型是String类型,它也比较特殊,可以直接通过关键字new来创建对象,也可以通过字符串直接赋值,比如:

Strings=newString("abc");

Strings="abc";

2、基本类型就是直接赋值就可以了,比如:

inta=123;

floatb=123.0;

boolean=true;

二、参数方面传递的不同

引用类型是引用传递

基本类型是值传递

三、比较方面的不同

引用类型比较的是引用地址(没有重写equals方法)

基本类型比较的是值

五、类型的不同

1、引用类型分为四种

强引用(StrongReference)

软引用(SoftRefernce)

弱引用(WeakReference)

虚引用(PhantomReference)

强引用-StrongReference

2、八种基本类型

整型byte8位

整型short16位

整型int32位

整型long64位

浮点型float32位

浮点型double64位

字符型char16位

布尔型boolean位数不确定

❷ 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引用与C语言指针的区别是什么

java引用与C语言指针的区别有以下几方面:

1、现象

指针在运行时可以改变其所指向的值,而引用一旦和某个对象绑定后就不再改变,总是指向最初的对象。

2、编译

程序在编译时分别将指针和引用添加到符号表上,符号表上记录的是变量名及变量所对应地址。指针变量在符号表上对应的地址值为指针变量的地址值,而引用在符号表上对应的地址值为引用对象的地址值。符号表生成后就不会再改,因此指针可以改变指向的对象(指针变量中的值可以改),而引用对象不能改。

3、类型

引用其值为地址的数据元素,java封装了的地址,可以转成字符串查看,长度可以不必关心;C指针是一个装地址的变量,长度一般是计算机字长,可以认为是个int。

4、内存占用

所占内存:引用声明时没有实体,不占空间。C指针如果声明后会用到才会赋值,如果用不到不会分配内存。

5、内存溢出

JAVA引用的使用权限比较小,不会产生内存溢出。C指针是容易产生内存溢出的,所以程序员要小心使用,及时回收。

6、本质

JAVA中的引用和C中的指针本质上都是想通过一个别名,找到要操作的目标(变量对象等),方便在程序里操作。所不同的是JAVA的办法更安全,使用更加方便些,但没有了C的灵活,高效。

❹ 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中指针怎么理解

实际上,java力图使程序员忘记指针,这包括2个方面:
第一,java限制指针,去除了指针运算。
第二,java从语法上努力隐藏指针,让指向某对象的指针看起来更像那个对象本身!

是的,所有的java书籍都让人忘记了指针这回事,我们仿佛只跟对象打交道。偶尔,会被迫分清引用和
对象的关系。这就是目前的情形。多么好的想法!对象可比那些个不知所以的指针亲和多了!这是一种伟大的抽象!

这里,我们也更愿意把引用和对象混淆。是的,为什么不呢?那样,整个世界都是对象,太好理解了!

可事实上,为了节省内存,java不能把引用(指针)完全废除。要知道,复制一个引用(指针)要比
复制整个对象有效得多!所以我们不得不面对引用和对象共存的事实。

下面我就好好分析分析:

指针已经被抽象成了引用,现在指针不能够随心所欲的运算,并且看起来就像个对象,完全没有了指针
的模样。但它毕竟和对象还是不同的,还要经过一层“转换”(从指向的那个对象里取数据)。如果我们
在引用满天飞的时候总想着这样一层转换,真的是很不舒服。比如:
String key="name";
String value="hyq";
HashMap map=new HashMap();
map.put(key,value);

你得想着:key只是个引用,value也是个引用,map还是个引用,我们刚刚做的是把key和value
这2个引用放进了map(也是个HashMap对象的引用)中,到时候我就可以通过map这个引用取得
里面的对应于key引用的value引用!

你不晕我就服了。
一旦你这样想,你每时每刻都要面对这样的绕口令。因为我们对对象的操作全部要通过引用!java没有提供语法让你直接得到对象!(指的是直接寻址)这一点通过比较原始类型很好理解,int i=8,那么
i就是8,不是什么指针,要先找到放着8那块内存的地址再把8拿出来。这样多直接,多方便啊!

所以,我们对引用最好也这么来理解,就轻松多了。
还是上面的例子,key就是个String,value也是个String,map是个HashMap,我们把key和value
放进map里,将来可以按key取出value。——多简单!

其实,这样的理解是很符合人的思维习惯的,我相信大多数人刚学java时都会自然而然的这么理解,
但是我们一定要注意在什么时候不能这么理解。只要记住什么时候不能这么理解,我们就不会因为
这种“近似”的理解方式而犯错,而同时从这种理解方式里得到了方便和好处。

把引用直接当作对象本身的好处是简单直接,容易理解,而“误差”的地方就在于,假设只有这个引用
可以修改此对象。换句话说,当别的引用修改了对象的时候,我们毫不知情并很感费解。比如:

String name=null;
HashMap map=new HashMap();
map.put("name",name);

//do a lot of things
name="hyq";

当我们再从map里取出name的时候,发现它已经被赋值为hyq了!放进去的时候明明是啥都没有啊!
咋就变了讷?
引用到name那个对象的不只你map一个阿!

在同一个函数里出现这种情况还不是很常见,我们一般也不必这么写,更多的是出现在函数调用、传参的时候,这样更加隐蔽,不易发现,也让代码可读性下降。比如:
String name=null;
HashMap map=new HashMap();
map.put("name",name);

alterName(name);

在alterName函数里我们修改了name对象,这会直接影响到函数外的map。

所以,当我们把引用和对象故意混淆时,一定要记住什么时候应该分清楚。

对象的使用不外乎以下几种情况:

1
String name=new String("hyq");
然后使用name,引用生命周期一结束,对象失效(无法被取用)了事。这里只有name一个引用指向此对象,随便怎么弄都不会出事。

2
String name=new String("hyq");
String anotherName=name;

这里假设只有name会修改对象,并且在anotherName引用此对象前做完所有修改,anotherName只是取用这个对象调用方法。在这种情况下,也不会出事。这也是我们经常遇到的情况,并且一般都是在函数调用传参时出现。注意传参实际上就是String anotherName=name;
这里尤其要注意的是2个引用的生命周期:name修改对象的时候另一个引用还没出世,而等它出世后
发现它又不会修改对象,怎一个爽字了得!

3
String name=new String("hyq");
String anotherName=name;
代码和上面一样,但是这里要么2个引用都会修改对象,要么只有一个修改但会影响到另一个。这个时候无论如何你不能再把引用当对象了,你必须分清楚它们。你必须小心仔细,不能有丝毫疏忽。

当然,这种写法和风格无论如何是不值得提倡的,若非必要(没办法)请勿模仿!因为必然有一个引用
在不知情的情况下被人修改了对象,等它用的时候会大吃一惊,而这个对象是在什么时候被什么人修改的,极难排查。
(上面例子举得不好,String类是不变类,汗!)
StringBuffer name=new StringBuffer("hyq");
StringBuffer anotherName=name;
//do a lot of things
anotherName.append("is my gf");

你可能写得爽,一时痛快就这么写了,你也知道是什么人在什么时候修改了对象,但是别人呢?
要知道,这里可能不是相隔几行代码这么简单,可能是嵌套了好几层函数调用!你把那个anotherName传到第5层函数里面,然后丧心病狂的修改了那个对象,除了天知地知你知,鬼
都看不出来!

❻ Java中this的用法跟C++的this指针一样吗

Java的this是改对象的引用,通过“.”号调用对象。C++的this是指向该对象的指针,用“->”调用对象。Java 的this引用和C++this指针虽然在用法上很相似,但是有本质的区别,引用相当于与对象的索引号,它的值对于程序员没有任何意义,而指针的值是对象的地址对程序员很有用处。

阅读全文

与java引用指针的区别相关的资料

热点内容
解放战争pdf王树增 浏览:683
python压测app接口 浏览:951
抖音app怎么推荐 浏览:98
歌库服务器能做其他什么用途 浏览:95
安卓44虚拟机怎么root 浏览:38
程序员瘦身c盘空间 浏览:243
dell服务器温度怎么看 浏览:303
游戏服务器地址是什么 浏览:69
C语言经过编译之后的程序是 浏览:160
编程设计一个简易计算机界面 浏览:516
游戏压缩包损坏 浏览:485
压缩包图标下载 浏览:229
日本解压喜剧 浏览:38
芜湖程序员兼职如何接 浏览:368
句译app怎么用 浏览:342
vs2010编译c怎么用 浏览:104
摩拜单车没app怎么退款 浏览:469
苹果手机下载的app怎么变色了 浏览:903
韵母app怎么写 浏览:603
命令提示符是中文 浏览:167