java传值和引用和c++的区别

他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)Java和C、C++的异同 - 简书
Java和C、C++的异同
C是“面向过程”的程序设计语言;C++,C#,java是“面向对象”的程序设计语言。举个例子:比如你想做一个模型飞机,利用“面向过程”的思想,你所想的就是,先做头再做身体,再做尾巴。它是一个比较顺着的概念。而如果利用“面向对象”的思想,你所想的就是,你要做飞机的话,它有翅膀,头部,身体,尾巴等各个部件,你先把各个部分做好,再考虑怎么把它们连接起来。C语言特点:
作为一种结构化语言,层次清晰,便于按模块化方式组织程序,易于调试和维护;表现能力和处理能力极强。可以直接访问内存的物理地址,进行位(bit)一级的操作;实现了对硬件的编程操作,因此既可用于系统软件的开发,也适合于应用软件的开发;具有效率高,可移植性强等特点。C#语言特点:微软开发的一种编程语言,语法类似Java,几乎就是从Java的翻版。运行原理和Java也类似,也是通过运行时库的支持运行。不过支持的平台还很有限,C#目前只被Windows和Linux支持,Windows下的支持当然是由微软自己开发的,而Linux下的支持则有MONO支持。实际上,MONO也是把C#应用转化为Java应用而已,所以本质上,C#仍然只是被微软自己的操作系统支持。应用平台受到限制,是它最大的缺点。C++语言特点:
1、在C语言的基础上进行扩充和完善,使C++兼容了C语言的面向过程特点,又成为了一种面向对象的程序设计语言;2、可以使用抽象数据类型进行基于对象的编程;3、可以使用多继承、多态进行面向对象的编程;4、可以担负起以模版为特征的泛型化编程。Java语言特点:Java语言是一种完全的面向对象语言,虽然它的底层(运行时库)是用C语言开发的,可是并不依赖于C。因为Java的运行是在运行时库的支持下进行的,所以运行效率比起可以更接近底层的C/C++来说效率会有所影响,不过Java的类库采用很好的设计理念设计,非常好用,也非常实用,已经成为业界的一种标准开发语言。它的跨平台的特性尤其让很多开发者欢迎,你只需要开发一次就能在所有安装了Java运行时库的系统上运行。Java发展了十几年了,可以应用领域非常之广泛,Web开发有JSP,J2EE,桌面领域现在有JavaFX。Objective-C特点:1.Objecive-C属于Smalltalk学派,其面向对象与C++面向对象编程力的Simula 67(一种早期面向对象语言)学派不同;2.Objective-C 是ANSI C的超集,扩展了C 语言使它具备面向对象设计的能力,例如类、消息‘继承;同时在Objective-C的代码中可以有C和C++语句,它可以调用C的函数,也可以通过C++对象访问方法;3.Objective-C可以实现底层系统编程,另一方面可以支持利用动态架构进行开发。Objective-C和C++的区别就是Objective-C更加灵活而降低了其编译的要求(这个降低并不是说编译就无要求,不会进行类型检查等),而C++提高编译的要求,在编译的过程发现更多的潜在错误,在运行前改正,同时会降低程序的灵活性。因此,在Smalltalk看来正确的程序在Simulr 67那里就无法通过。Java和C++相同点:都是面向对象语言,具有面向对象思想(封装、继承、多态),而由于C++兼容了C,使得自身成为了带类C的语言。而Java则是完全面向对象的语言。不同之处:Java无法让编程者通过指针来直接访问内存—无指针,并且自动添加了内存管理功能,从而有效的防止了C、C++语言中指针操作失误;但是Java虚拟机内部仍然使用了指针,只是程序员不可使用而已。C++支持多重继承,允许多个父类派生一个类,但使用复杂;Java不支持多重继承,但允许实现多个接口,实现了C++多重继承的功能,又避免了C++中的多重继承实现方式带来的诸多不便。Java程序中所有的对象都是用new操作符建立在内存堆上。可以自动进行无用内存回收操作,无需程序员进行删除,而C++需要程序员释放无用内存资源。Java不支持操作符重载和预处理功能,而C++有预编译功能。C/C++不支持字符串变量,而Java可以用类对象(String或者StringBuffer)来实现对字符串的操作。Java中的异常机制用于捕获意外事件,增强系统容错能力。
天道酬勤!
Java 基础思维导图,让 Java 不再难懂 - 工具资源 - 掘金思维导图的好处 最近看了一些文章的思维导图,发现思维导图真是个强大的工具。了解了思维导图的作用之后,觉得把它运用到java上应该是个不错的想法,这样回顾知识点的时候一目了然,快速知道自己的短板。 思维导图...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金 相信有很多...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金相信有很多朋友...
想从事游戏开发,1 年内能精通 C++ 吗,还需要学习什么? 【MiloYip的回答(383票)】: 本人大约从20多年前开始学习及使用C++,但仍未达到我认为「精通」的阶段,甚至对于C++11的各种新特性也未掌握。然而因为我是在读书时自学C++的,也是游戏程序员(原问题中...
转自http://blog.csdn.net/xugangwen/article/details/ 经典编程书籍大全: http://blog.jobbole.com/106093/ https://github.com/jobbole/awesome-pr...
是你先开始 最后放不下的 却是我 如果可以重来 我一定选择不要认识你 可是现在 我还是会变成更好的自己 出现在你的面前 希望那时候 你可以喜欢我 就像从前一样 你可以等我么
今天去赶集了是赵各庄(3、5、7、10)的集,庞各庄是逢2逢8有集… 9点左右有点犯困不想做事的感觉,就找东西吃,找了半天没找到。郑威的哥哥就说他有吃的,我就吃了两粒木糖醇。 立刻有了坚持下去的动力,看来奖励真的很重要!
文/骑马上岸的人 春 小雨多愁 杏花多愁 跨鲸而来的马儿 也多愁。
娱乐圈明星众多,大家一提起他们,便想到他们光鲜亮丽的艺人身份。作为演员会演戏是很正常的,但是除此之外,其实明星们还有很多隐藏不露的才艺。例如刘涛、吕佳容、江一燕、吴昕,她们台前台后才艺全能,着实是十分优秀。 “贤妻”刘涛是位赛车高手 刘涛是出了名的“贤妻”,她形象佳、会...
一、整体分析 这幅画充满了整张纸,在家庭生活中,案主是个强调自我存在的人,而整体偏下的画面,在一定程度上反映了案主在寻找自我存在过程中的不安感,可能需要在子女身边获得满足。画中阳光灿烂,花草绽放,案主应该是个乐观的人,能够享受生活,同时也是个偏感性的人,不追求逻辑,凡事随心...在线QQ咨询
java与C++的区别在哪里?武汉java培训从入门到精通
来源:武汉北大青鸟鲁广校区   发表时间: 13:52
  java与C++的区别在哪里?武汉java培训从入门到精通
  首先应该清楚,Java是由C++发展而来的,它保留了c++的大部分内容,类似于c++,但句法更清晰,规模更小,更易学。它是在对多种程序设计语言进行了深入细致研究的基础上,据弃了其他语言的不足之处,从根本上解决了c++的固有缺陷,而产生的一种新的完全面向对象的语言。
  Java和c++的相似之处多于不同之处,但两种语言问几处主要的不同使得Java更容易学习,并且编程环境更为简单。
  1.指针
  Java无指针,并且增添了自动的内存管理功能,从而有效地防止了c/c++语言中指针操作失误,如指针悬空所造成的系统崩溃。比w操作返回一对象的引用,类似于c++中的引用;在c++中,new返回一个对象的指针。在Java中无指针,不会遇到下面这样的语句:
Mywork—&Mywork(); 没有指针的程序无法访问不属于它的内存,消除了在c++中—些常见的错误,这有利于Java程序的安全。
  2.多重继承
  c++支持多重继承,这是c++的一个特征,它允许多父类派生一个类。尽管多重继承功能很强,但使用复杂,而且会引起许多麻烦,编译程序实现它也很不容易。Java不支持多重继承,但允许一个类继承多个接口(界面),实现了c++多重继承的功能,又避免了c++的许多缺陷。
  3.数据类型及类
  住Java‘fJ,使用了个能和整数湖蝴的布尔类型(bo01ean),它仪有二个值:true或false。Java是完全面向对象的语言,所有函数和变量部必须是类的一部分。除了基本数据类型(如控型初浮点型)之外,其余的都作为类对象,包括中和数组。对象将数据(Proper山s)和方法(methd)结合起来,把它们封装在类中,这样每个对象都可实现自己的特点和行为。而c++
  允许将函数和变量定义为全局的。 此外,Java中取消了c/c++中的结构和联合,使编译程序更简捷。
  4.自动内存管理
  Java程序中所有的对象都是用new操作符建立在堆栈上,这个操作符类似于c++的new操作符。
Javs自动进行无用内存回收操作,不需要程序员进行删除。而c++中必须由程序贝释放内存资源,增加了程序设计者的负扔。Java中当一个对象不被再用到时,无用内存回收器将给它加上标签以示删除。无用内存回收器在后台运行,利用空闲时间工作。
  5.操作符重载
  Java不支持操作符重载。操作符重载被认为是c++的突出特征,在Java中虽然类大体上pJ以实现这样的功能,但操作符重载的方便性仍然丢失了不少。Java语言不支持操作符重载是为了保持Java语言尽可能简单。
  6.预处理功能
  Java允预处理器.因此不支持预处理功能。c/c++在编译过程中都有一个预编泽阶段,即众所周知的预处理器。预处理器为开发人员提供了方便,但增加丁编译的复杂性。JaM没有预处理器,但它提供的引入语句(i”Port)与c++预处理器的功能类似。
  7. Java不支持缺省函数参数,而c++支持
  在c中,代码组织在函数中,函数可以访问程序的全局变量。c++增加了类,提供了类算法,该算法是与类相连的函数,c++类方法与Java类方法十分相似,然而,由于c++仍然支持c,所以不能阻止c++开发人员使用函数,结果函数和方法混合使用使得程序比较混乱。
  Java没有函数,作为一个比c++更纯的面向对象的语言,Java强迫开发人员把所有例行程序包括在类中,事实上,用方法实现例行程序可激励开发人员更好地组织编码。
  8 字符串
  c和c++不支持字符串变量,在c和c++程序中使用Null终止符代表字符串的结束,在Java中字符串是用类对象(strinR和stringBuffer)来实现的,这些类对象是Java语言的核心,用类对象实现字符串有以下几个优点:
  (1)在整个系统中建立字符串和访问字符串元素的方法是一致的;
  (2)java阳字符串类是作为Java语言的一部分定义的,而不是作为外加的延伸部分;
  (3)Java字符串执行运行时检空,可帮助排除一些运行时发生的错误;
  (4)可对字符串用“+”进行连接操作。
  9. goto语句
  可怕的goto语句是c和c++的“遗物”,它是该语言技术上的合法部分,引用goto语句引起了程序结构的混乱,不易理解,goto语句子要用于无条件转移子程序和多结构分支技术。
鉴于以广理由,Java不提供goto语句,它虽然指定goto作为关键字,但不支持它的使用,使程序简洁易读。
  l0.类型转换
  在c和c++中有时出现数据类型的隐含转换,这就涉及了自动强制类型转换问题。例如,在c++中可将一浮点值赋予整型变量,并去掉其尾数。Java不支持c++中的自动强制类型转换,如果需要,必须由程序显式进行强制类型转换。
(版权所有,转载时必须以链接形式注明作者和原始出处及本声明)
下一篇:没有了
高中以上: 、
大学以上: 、
其他学历: 、 、
在职: 、 、 、
待业: 、 、 、转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/5827273.html
& & & & & &
C/C++代码&&编译(不同的系统编译出不同的机器码,所以同一个C/C++文件不一定可以在某些系统执行,因为编译出的机器码不同)&&机器码&&&&在操作系统中由硬盘读取到内存中运行&&内存&&CPU&&输出结果
& & & & & & & & &&
Java代码&&&&编译得到字节码文件(.class)&&&&JVM执行字节码文件(字节码在虚拟机上运行,虚拟机相当于翻译官,不同的系统JVM不同,转换规则不同,把同一个字节码文件转换为相应的系统的机器码)&&&&机器码在相应系统运行&&内存&&CPU&&结果
由于JVM的存在,只需在不同的系统上安装相应的JVM,同一个.class文件在相应的系统的JVM运行就会输出相应系统能解析的机器码,从而成功运行。
这就是,一次编译,到处运行。
打个比方,就是:
一本汉字写的书(源码),去到不同的国家(系统),每个国家有相应的翻译官(JVM虚拟机)把汉字翻译成其所在国家的文字(比如这本书传到英国被翻译成英文书),之后就可以在这个国家流传开了(相当于程序成功运行)。
另外,补充一点:&
JAVA有两特性:
移植性:一次编译,到处运行(上面已解释)
安全性:自动回收内存中不常用的命令垃圾,防止内存溢出。
阅读(...) 评论()C++和JAVA的区别是什么?_百度知道
C++和JAVA的区别是什么?
我有更好的答案
Java有垃圾回收机制,当然也就没有C++的析构函数。但是,可控制性和C++相比就差了一点,而且也不是说有了垃圾回收,就不会产生内存泄漏。由于相互引用等原因可能造成对象的生存周期过长,垃圾回收失效。对象内存的回收,个人认为应该是由程序员来掌握的事情。C++可以用auto_ptr,shared_ptr等智能指针来完成自动析构,当然前提是你要熟悉他们的实现机制和应用场合(2)
Java中所有的对象都是分配在堆上,在Java中只有句柄,也就是引用,没有指针。这样做有哪些好处呢? a)没有指针。在java中没有sizeof, 没有*。看看下面这些语句吧,感觉是不是很象。b) 避免了临时对象。在Java中所有的对象都是以句柄表示,函数参数传递,结果返回等都是以句柄形式。也就避免了C++中经常出现的局部指针局部引用问题, 对象参数拷贝赋值,切片等问题,提高了效率和可靠性。String a = new String(“123”); // Java Codestd::string *a = new string(“123”);
//c++ code(c) 在Java中,包含关系只能由句柄表示。(3) Java是单根继承体系,而C++可以有多重继承。java可以用interface来实现多重继承。来谈谈Java中的Object类,许多有趣的地方。Clone方法,C++也可以实现,呵呵,”虚拟构造函数”,参见&&More Effective C++&&Equals方法, 由于Java中对象只能由句柄表示,又没有C++操作符重载的能力,所以这个来比较等价对象。C++中我们可以重载”==”操作符来判断等价对象。Finalize方法,呵呵,类似于析构函数,但是千万不要当成析构函数来用哦,这个方法何时调用不是你能把握的,取决于垃圾回收机制hashCode方法, STL没有HashMap,HashTable等,但是java.util中有,所以…..剩余的都是满足线程和同步的方法,跟C++没有可比性(3)
在java中数组也是对象,所以当你下标越界的时候,会收到一个异常。而C++数组显然要比Java快点,因为他不检查index。(4)
在java中,”123”这种字符串也是对象,而在C++中确是const char*, 最让人范错的是那个字符串结束符。但是java和c++对这种const char* 字符去有相同的优化,试试下面的代码:String a = &123&;
String b = &123&;if (a == b){
System.out.println(&OK&);} C++代码:const char *p = &123&;const char *q = &123&;
if ( q == p)
std::cout&&&OK&&&std::
Java中所有的对象方法都是virtual, 除了声明为final的方法。(6)
没有操作符重载(7)
语言级的序列化机制, C++也可以实现,呵呵,看看C++高手对话中的,那位用模板模式来实现序列化。(8)
语言级的线程类极其配套互斥类等(9)
语言级的异常体系。C++中的异常少的可怜,就STL中那几个,当然C++要的就是高效(10)
Java反射机制哎,从反射机制就可以看出来,Java和C++根本就没有可比性嘛。
当一个const成员函数修改成员数据,或调用非const成员函数时, union, enum, 数组和指针.f( ) (Java) 两者都有内部类和局部类的语法和语义 Java中没有友元函数和友元类的概念,严格支持封装,然后由Web浏览器下载和执行 Java API有对网络通讯的特别支持 C++则无内置网络功能 C++程序员必须显式地实现动态内存管理,在析构函数中用delete运算符或free( )函数释放对象和其他动态分配的数据空间,如文件句柄 Java源代码被编译成字节码(,否则会造成“内存泄露” 而在Java中,我们需要为它事先定义“拷贝构造函数”、“赋值运算符的重载函数”和“析构函数”;否则编译器将以“按位copy”的形式自动生成相应的缺省函数。倘若类中含有指针成员或引用成员,那么这三个默认的函数就隐含了错误 Java则没有这种语法结构和语义逻辑 C++支持inline函数,可以避免函数的堆栈调用,提高运行效率 Java无这种语义 C++中,构造函数的初始化列表是这样使用的:《C++程序设计教程》)时,在三种情况下,自动调用它 用一个对象初始化另一对象 对象作实参进行函数调用 对象作函数的返回值 通常,当一个对象需要做“深拷贝”(钱能;C++做出的一大改变,因此,常量可以使用const或#define定义 const还可以修饰成员函数,即“常成员函数”,指代父类对象,通常被用于调用父类的构造方法或一般方法 C++则没有super关键字 两者都有this,指代当前对象 Java有package的概念:必须在类体外初始化 A,正像基本数据类型那样 Java不支持这种多态机制,也是为降低复杂性 两种语言都支持方法重载(overloading) 在C++中,为了允许运行时动态决定哪个函数被调用,这是它的一个很重要的多态特征,是数据抽象和泛型编程的利器。它允许直接对对象进行四则运算,垃圾收集是自动的。当对象的最后一个引用变量被释放掉。C++在很大程度上已经支持了这种新型编程方法,特别是STL的出现 Java目前仍未支持泛型编程。将可有可无的语言元素去掉是Java对C&#47,编译器会报错 我们应将不修改成员数据的函数声明为const Java和C++中的static关键字语法和语义基本相同 static成员变量又叫类变量,被类的所有对象共享 A:,是平台相关的 因此,转换成相应平台的机器码。但ASCII是Unicode的子集: protected B, public C (C++) class A extends B (Java) Java有super关键字,C++指针可以指向对象,允许外部方法访问类的私有成员,因此不是一种纯面向对象的编程语言 Java中类或interface可以用public修饰.x (Java):必须在类体内初始化 static成员方法又叫类方法,访问static变量 A,也可以不指向对象 Java没有枚举、联合类型,因为Java认为没有必要, int, long, float,代表布尔类型,整型也作为逻辑判断 模板是一种“泛型编程思想”,它有别于“面向对象编程思想”。C++没有这个概念,因此Java是体系结构中立和跨平台的 而C++直接被编译成底层平台的二进制机器码,由CPU执行.class文件),字节码是一种只有JVM才能识别的二进制低级代码,它与具体的处理器无关Java程序中的每个变量要么是基本数据类型(boolean, char, byte, short,可以将类组织起来,便于打包和部署,也有利于类的安全,当解释执行时,Java程序速度更慢 Java语言支持多线程,允许并发线程的同步与互斥操作 C++则没有这种内在机制:首先按继承顺序调用基类的构造函数构造基类对象,然后按声明顺序调用成员对象的构造函数构造成员对象,一个函数必须用virtual修饰。virtual关键字被自动继承,用以支持多态 凡是没有用virtual修饰的成员函数(包括static)都是静态绑定的,即在编译时决定调用哪个版本 而在Java中,除了static,要由安装在OS之上的JVM解释执行,对于习惯于ASCII的程序员感觉不到区别 Java中的boolean类型不能转换成其他类型,Java则没有 class A,这个对象就成为垃圾收集器的候选对象了 因此Java不支持析构函数 finalize( )方法主要被用来释放先前打开的非内存资源,一个类可以被任意类访问 Java applet可以被嵌入HTML文档中、final、private是静态绑定以外,所有方法一律按动态绑定处理 C++中有“拷贝构造函数”的概念,由子类实现其抽象方法,且抽象类都不能被直接实例化为对象 Java中有final关键字,修饰类、方法或变量 final类不能被继承 final方法不能被子类覆盖 final变量就是常量 C++中没有这个关键字,也可以不修饰;而C++类不能修饰 三种访问权限的语义相同,语法略有差别 C++中还有继承权限修饰符,不允许外部方法访问类的私有成员 而C++支持friend关键字,最后对列表中出现的成员变量做初始化 Java不采用初始化列表这种构造机制 它们的构造顺序基本一致: 静态变量初始化 静态初始化块(Java) 调用基类的构造函数构造基类对象 实例变量的初始化 构造函数的其余部分 Java使用abstract关键字修饰抽象方法或抽象类 C++的对等语法是“纯虚函数”和“抽象类” 两者都使用抽象类作为继承层次中的基类,提供一般概念::f( ) (C++) A:x (C++),不过据说Sun公司有在Java中引入模板的计划 C++支持“运算符的重载”,普遍认为Java较C++更轻便,反之亦然。C++最近引进了bool类型,更精简 Java采用Unicode字符集,C++通常用ASCII字符集, double),要么是对对象的引用 C++有许多种基本类型,额外还有struct
C是一个结构化语言,如谭老爷子所说:它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制),而对于C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。 所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中”,而就语言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,错!算法是程序设计的基础,好的设计如果没有好的算法,一样不行。而且,“C加上好的设计”也能写出非常好的东西。 对语言本身而言,C是C++的子集,那么是什么样的一个子集?从上文可以看出,C实现了C++中过程化控制及其它相关功能,而在C++中的C(我称它为“C+”),相对于原来的C还有所加强,引入了重载、内联函数、异常处理等等玩艺儿,C++更是拓展了面向对象设计的内容,如类、继承、虚函数、模板和包容器类等等。 再提高一点,在C++中,数据封装、类型这些东东已不是什么新鲜事了,需要考虑的是诸如:对象粒度的选择、对象接口的设计和继承、组合与继承的使用等等问题。 所以相对于C,C++包含了更丰富的“设计”的概念,但C是C++的一个自洽子集,也具有强大的功能,同样值得学习。 如果想学编程的话,建议还是先学C,因为C是基础。C主要是培养人的编程思想。如果C学习的好的话,再向C++过渡就很容易了。
Java是C++实现的。Java有完整的安全机制,入 垃圾回收,引用计数 等等。 Java是解释型语言,速度较慢,安全性高。C++编译完是机器语言,速度较快,安全性相对较低。
其他1条回答
为您推荐:
其他类似问题
您可能关注的内容
java的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。}

我要回帖

更多关于 数组逆向输出 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信