java和c++指针的比较

【win11 cuda12.0安装tensorflow-gpu】 win11 cuda 12.0 安装 tensorflow-gpu 阅读详情


JAVA:它不是没有指针,而是对指针进行了伪装:使用上泛化、强化和简单化,概念上淡化和弱化。。。 C++中可以有对象类型的变量和对象指针类型,两者的区别如下: Object oo = Object(); Object * oop = new Object(); 也就是说当使用new方式时,是动态为对象分配内在并将地址赋给oop这个指针变量。 JAVA中只有一种相关类型:对象类型,可是它的表现形式却是这样的: Object oo = new Object(); 比较一下,原来它就是使用了C++的动态内在分配方式创建了一个对象,并把地址返回给了oo变量,也就是说oo本质上就是一个指针变量。引申一下:JAVA中的对象类型本质上应该叫做对象指针 类型。那么传统的对象类型呢?在JAVA里已经不见了踪影!既然没有了传统的对象类型,那么 对象指针变量前面的*也就可以不要了。对象指针变量也就可以简称为对象变量了,反正也不会和其它概念混淆!所有的对象变量都是指针,没有非指针的对象变量,想不用指针都不行,这就是指针的泛化和强化。不叫指针了,就叫对象变量,这就是概念上的淡化和弱化。没有了指针的加减运算,也没有了*、->等运算符,这是对指针的简单化。 这可以从很多方面得到验证。首先,JAVA强调所有的对象赋值和传递都是引用,解释如下: Object a=new Object(); 并不是将新生成的对象赋给a,a是对新生成对象的引用。 Object a=new Object(); Object b; b=a; b并不是一个新对象,它是对a对象的引用。好复杂啊!其实呢,a是指针,b也是指针,将a的值赋给b,也就是将a所存储的地址赋给b,b自然指向了a所指向的对象。其实,JAVA强调两个对象的相等比较不是比较两个对象的值是否相同,是比较两个对象是不是相同的引用。解释如下: Object a=new Object(); Object b=a; a==b为真,两个对象引用相同。 String a=new String("abc"); String b=new String("abc"); a==b为假,两个对象引用不同。不太明白是吧--其实呢,==的意义并没有变。a是指针,b也是指针,a、b存储的都是地址,当两个变量存储了同一个对象的地址时,这两个地址当然相等,a==b自然是真。当两个变量存储了不同对象的地址,这两个地址值当然不同,a==b自然为假。然后,一个问题出现了,怎么生成两个完全相同的对象呢?在Thinking in Java中用了很长的篇幅去解释clone的用法,因为只有克隆才能真正生成两个完全相同的对象--在C++中本来很简单的问题变得复杂了--不过也没什么,有利必有弊嘛,反正用的时候也不多。最后,再看看链表的问题,用C做例子吧(可以移植到C++): struct linktable{ int a; float b; struct linktable c; } 是不行的,因为在定义c时需要确定它要占用的内存,struct linktable还没有定义完,没法确定,象下面这样做吧: struct linktable{ int a; float b; struct linktable * c; } c是指针,它占用的内存大小是固定的,与它指向的数据类型的空间无关,因此可以确定。再看JAVA,号称没指针也能做链表: class linktable{ int a; float b; linktable c; } 好厉害!其它也没什么,不是说了吗,JAVA的对象变量实质上就是指针变量,c就是个指针: linktable c; 和 struct linktalbe * c; 本质上完全相同! 


Wiley:International Journal for Numerical Methods in Biomedical Engineering投稿流程 中间过程省略,这个出版社很人性化,投稿的web UI也很好看。上传word之后,一步步跟着走就行,不用填太多东西。不要最后在最后检查阶段,重新上传word文件,这样会导致,之前针对word的操作全部改变。 阅读详情

相关推荐

深度探索:非线性随机森林(Nonlinear Random Forest,NL-RF)原理及应用

非线性随机森林(NL-RF)旨在通过结合集成方法与高级技术来捕捉和建模数据中的非线性关系,从而改善传统随机森林在处理复杂非线性数据结构时的表现。

qq_51320133的博客 2067

Java的引用和c++的指针区别

1.类型:引用其值为地址的数据元素,java封装了的地址,可以转成字符串查看,长度可以不必关心。C++指针是一个装地址的变量,长度一般是计算机字长, 可以认为是个int。 2.所占内存: 引用声明时没有实体,不占空间。C++指针如果声明后会用到才会赋值,如果用不到不会分配内存。 3.类型转换:引用的类型转换,也可能不成功,抛异,或者IDE就不能通过。C++指针只是个内存地址,指...

hanshzh的博客 306

电源新手别怕!手把手教你搞定Buck电路的环路补偿(附Type II/III补偿器参数计算)

本文为电源设计新手详细解析Buck电路环路补偿技术,重点介绍Type II和Type III补偿器的参数计算与设计方法。通过实例演示和实用技巧,帮助工程师快速掌握环路补偿原理,解决电源振荡、响应慢等问题,提升电路稳定性与性能。

weixin_30607029的博客 619

Java的指针、引用与C++的指针、引用的对比

1. 指针指针是存储内存地址的变量,其目的是充当该地址存储的内容的别名。所以,指针是引用,但引用不一定是指针。指针是引用概念的特定实现,该术语往往仅用于可让您直接访问内存地址的语言。2. 引用引用是指引用其他内容的变量,并且可以用作该其他内容的别名。

chris3will的博客 596

ArcGIS基础:城市交通网络构建及设施服务分析(一):道路数据处理与拓扑操作

首先需要加载数据, 1:选择这个数据库:,右键导入,选择导入单个要素,弹出“要素类至要素类” 2:输出位置(导入的数据是CAD格式数据)。 3:输出要素类为道路。 4:字段只保留道路类型字段。 这个操作是分类合并各级道路数据。 1:通过属性选择各类道路数据。 2:比如此类都是“干道”。 3:编辑器下来,然后合并即可。 得到如图所示,需要用到三个字段。 上面这个操作是打断道路相交线。 1:选中所有数据。 2:找到高级编辑中的打断相交线。 3:确定即可。 下面进行拓扑检查,虽然我们已经进行合并和打断相交.

yuanYW7556的博客 2万+

深入理解Java中的指针——引用

基于Java特性以及C++中指针特性的关于Java中引用类型的理解

2301_79698279的博客 3204

二维紧束缚模型求解程序

假如我们已经推导出了二维紧束缚模型的哈密顿量矩阵H(kx,ky)的解析形式,那么在整个布里渊区对角化矩阵就可以得到能带。从技术上说这里面有以下几个问题。 1. 缺少实空间和倒空间的坐标,使得能带难以和布里渊区高对称点对应。 2. 最容易处理的布里渊区是矩形,对于其他多边形,如果全布里渊区mesh画费米面有一定技术困难。 因此一个好的处理框架是首先给出实空间原子坐标,给出实空间哈密顿量,...

wwxy1995的博客 4083

java 对比c 指针_java中引用对比C++指针

java对象的声明和初始化java中,Object o 等价于C++中的 Obejct &o (改正:Object o等价于 Object* o),o本身是一个引用(其实是指针),在o未被初始化(对o进行赋值)前,o的引用为空。也就是此时o为null。进一步讲,此时o仅是一个标识符,存在于java栈中,对象Obeject没有被类加载器进行加载,也就不会有初始化的过程。Object o = ...

weixin_29261711的博客 437

C#实战:通过ZPL指令与斑马打印机交互及状态监控全解析

本文全面解析了在C#中通过ZPL指令与斑马打印机进行交互及状态监控的实战方法。文章详细介绍了TCP/IP网络打印和Windows Raw打印两种核心连接方式,并深入讲解了ZPL指令的构建。重点阐述了通过SGD命令和斑马官方SDK实现实时打印状态监控的策略,为工业自动化场景下的可靠打印提供了完整解决方案。

weixin_29294395的博客 117

【YOLOv11改进[Backbone]】 使用Ghostnetv2替换Backbone

使用Ghostnetv2替换Backbone

静谧、淡雅 518

java中到底有没有指针

学过c/c++,然后学java的人往往心中有此纠结,java中到底有没有指针? 如果一定要在是或否里选择一个,OK,java中没有指针。 那么,java中的引用(reference)和c/c++中的指针(如无特别说明,后文指针均指c/c++中的指针)究竟有着什么样纠葛不清的关系呢? 在开始之前先说一下c/c++的引用,它跟java的引用完全不是一个东西,c/c++的引用是同一块内存的

梵依然的专栏 1万+

人工智能混合编程实践:C++调用封装好的DLL进行异常检测推理

C++、Python、ONNX、人工智能、异常检测、Anomalib 2.1.0

FriendshipTang的博客 170

在java和python和c++中的 比较/null/指针/if/%/字符变数字/round/区别

python is, is not 对比的是两个变量的内存地址 ==,!= 对比的是两个变量的值 java 基本数据类型:值分配在内存栈上 引用数据类型:对象本身的值分配在内存堆上 都是直接分配在内存栈上,不过引用数据类型在栈上分配的是引用,对象本身的存储在内存堆上 比较基本类型 : 没有.equals方法 只能用== 比较对象 object.equals(obj)...

puspos的博客 315

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

(总结)C++与java比较教程--7.2 C++中声明指针类型和指针数组(待补充)

C++中声明指针类型和指针数组       C++和Java最引人瞩目的区别之一就在于C++有指针而Java没有指针.        注意:有人认为Java中的对象引用实际上就是指针,但是由于Java中的对象引用并不直接是一个内存地址,不能对其进行解引用,也不能对其进行指针运算,所以不认为其为指针.     1.C++中声明指针类型:    (1).任意类型的指针的声明.

轻雨漫步的专栏 1142

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

java 中的虚函数,java和c++比较(1)–虚函数和指针-JSP教程,Java技巧及代码

1.java中有虚函数,但是没指针,那也许会有这样的问题,那java是怎么实现多态的?java中可以肯定是有虚函数的,而且我们如果不申明为final形他默认就是虚函数.不用vitual申明.“injava,youdonotneedtodeclareamethodasvirtual.dynamicbindingisthedefaultbehavior.ifyou...

weixin_39955142的博客 107

Java中的引用(reference)和C/C++中的指针

Java 中没有指针的概念,引用是 Java 用来处理对象访问的机制,它类似于指针,但没有直接的内存操作。在中,存储的实际上是ListNode节点的引用,而不是直接的内存地址或指针。引用可以类比为指针,但它与 C/C++ 中的指针不同,因为 Java 中没有直接操作内存地址的能力。

u013615804的博客 820

【Java】Java与C++:比较与对比

Java和C++都是流行的编程语言,但它们在许多方面存在明显的区别。让我们深入探讨一下这两者之间的主要差异。

double222222的博客 1174

JAVA与C、C++比较

浅比较Java与C、C++在语言类型、指针、多重继承、操作符重载、自动内存管理五个方面的特点

weixin_51470609的博客 617

java int 指针_java和指针

尽管java并不使用显示指针而且不允许编程者使用指针,可是访问对象依然以来指针。一个对象占用了从某个位置开始的一段内存空间,指针对于该对象而言只是一个保存了对象地址的变量,并且这个地址是对象的内存起始地址。在很多的语言里,指针是一种变量类型的技术术语,在Java中避免了这个术语而是用引用代替了它。用例子说明更为明了。比如定义了一个实体Class Node{Stirng name;int age;}...

weixin_42717586的博客 589

Java vs C++ 基础异同比较

数据类型 Java 中只有8种数据基本类型,C++的基本数据类型较多 Java 中的8种基本数据类型为:boolean, byte, short, int, long, float, double, char c++ 中的数据类型较多,且部分写法有所区别:bool, short, int, long, float, double, char 基本数据类型占用的字节数有所区别,因为 Java ...

子翊寒 487

C++与Java的区别

对于作者来说,知道的JAVA和CPP的区别最清晰的就是CPP有指针,而JAVA中没有指针,但是我不知道的是C++中的数组是利用指针形成的伪数组,而JAVA中的数组是真正的数组,因为CPP中的伪数组使用指针进行实现的,而CPP中一个问题就是容易在循环的时候因为自身的问题导致循环越界从而导致程序崩溃。不同于C++中利用指针实现的伪数组,Java引入了真正的数组,同时将容易造成麻烦的指针从语言中去掉,这将有利于在C++程序中常见的因为数组操作越界等指针操作而对系统数据进行非法读写带来不安全的问题。

2301_78802693的博客 103

c 指针 java_C / C ++指针与Java参考

指针在C,C ++编程语言中,指针是一个变量,用于保存另一个变量的地址。示例#includeusingnamespacestd;intmain(){//int变量inti=8;//指针变量int*pI;//将i的地址分配给它的指针pI=&i;//打印号码cout<//打印号码的地址cout<//打印指针指向的值count<//使用其指针更改变量的值...

weixin_33648811的博客 343

C++中的变量是否相等 和 Java中的变量是否相等的判断

C++中 char str1[]="abc";char str2[]="abc";str1与str2不相等,为什么? 两者不相等,是因为str1与str2都是字符数组,每个都有其自己的存储区,它们的值则是各存储区的首地址。 const char str3[]="abc";const char str4[]="abc";str3与str4不相等,为什么? 这是在栈上分配的  从高

沐埜专栏 814

JAVA的引用与C++的指针有什么区别

JAVA的引用与C++的指针有什么区别

这里有一只小马吖 1502

C++引用变量和指针变量的区别

引用:reference ,为对象起个名字 int ival =1024; int &refVal =ival;// refVal指向ival,refVal是ival的另一个名字 特点: 引用不是对象 引用定义必须初始化,不同于拷贝(把1024拷贝给新对象ival中),引用是把初始值和引用名绑定起来。 初始化完成后,引用必须一直和初始值对象绑定在起义,不可以绑定其他 指针: int* ip1,*ip2; // ip1和ip2是指向int类型的指针 double dval; double*pd

z_6_2_0_s的博客 360

Java和C++的对照

这是一个Java语言和C++语言之间的比较. 目录   [隐藏]  1 设计目标2 语言特性 2.1 语法2.2 语义2.3 资源管理2.4 库2.5 运行时2.6 模板 vs. 泛型2.7 杂项 3 性能4 所有权控制5 参考文献6 外部链接 设计目标[编辑] C++和Java语言之间的不同可以追溯到它们各自的传统,它们有着不同的设计目标。 C++ 被设计成主要用在系统性应

JAVAweb学习 571
上一篇: 十秒钟解决 Ecilipse调试时出现 cannot connect to Vm 问题
下一篇: java中关于类的反射详解
撒行地
博客等级 码龄17年 28粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值