Java引用实现类似C++指针操作

本文深入解析了C++与Java在对象、引用及指针方面的区别,详细解释了对象与引用的存储机制,以及如何通过引用操作堆内存中的对象,对比了C语言中的指针与Java引用的不同之处。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

我一直学习C++,是java的初学者,这一周正学习java的对象、引用,转载一些自己觉得很有意义的东东,以及javaC++的区别。

Public class Person{

         Public String name;

         Public int age;

         Public void say(String content){

                   System.out.println(content);

         }

}

这样一行代码:

Person p = new Person();

这行代码创建了一个person实例,这个person实例被赋给p变量。程序中定义的person类型的变量实际上是一个引用,它被存放在栈内存里,它指向实际的person对象,而真正的person对象则存放在堆内存中。

下图显示了将person对象赋给一个引用变量的示意图:

栈内存中的引用变量并未真正存储对象里的属性数据,对象的属性数据实际存放在堆内存里。而引用型变量仅仅只是指向该堆内存里的对象。从这个角度来看,引用型的变量与C语言里的指针很像,他们都是存储一个地址值,通过这个地址来引用到实际对象。实际上,java里的引用就是C里面的指针,只是java语言把这个指针封装起来,避免开发者进行繁琐的指针操作。

当一个对象被创建成功以后,这个对象将保存在对内存中,java程序不允许直接访问堆内存中的额对象,只能通过该对象的引用操作该对象。

Java中的引用于C的引用是有区别的,C语言中的引用是指变量的别名,在程序中不会为它分配任何的内存,而java的引用会在栈内存中分配一定的内存,更类似于c的指针。

C语言中的指针的类型与指针的定义

程序中对变量的操作,实际上是对某个地址的存储单元进行操作。这种直接按变量的地址存取变量值的方式称为“直接存取”方式。
指针变量:用来存放内存地址的变量称为指针变量。
设:指针变量p中存放了变量a的地址。则有如下图所示:

指针变量的定义:

形式:     类型名    *指针变量名1,指针变量名2…;

如: int *pi,*pj;

说明:* 是说明符,用来说明该变量是指针变量;

int 是类型名,用来说明 pi pj 是指向整型变量的指针。

指针的类型:指针所指向的变量的类型。

int 也称为 pi pj 的“基类型

如:int *p;            /*p中只能存放整型变量的地址*/
    double *pd; /*pd
中只能存放double类型变量的地址*/                            
    float *pf;             /*pf
中只能存放float 类型变量的地址*/
    char *st;            /*st
中只能存放字符类型变量的地址*/
又如:int *p,i,k;
         i=3;
         p=&i;                  /*
i 的地址赋给指针变量*/
         k=*p;              /*
将所指地址中的内容赋给k*/
注:int *P ; 此时*P表示指针类型,* 是指针类型说明符,在非定义中的 *p 为所指变量中存放的内容,在此例中代表存储单元i

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值