/部分文字来源于网络/
关于C/C++与java的异同性的讨论
前言:C++和Java都是面向对象的语言,其中C++是编译型语言,Java是解释型语言,Java晚于C++发布,从语言风格上看,很大程度参考了C++,但也删去了其中很多部分,例如,头文件、指针、引用、运算符重载、模板类等等,可以算是简洁版的C++。
C++和Java的最大不同:
- 头文件
c++里有头文件,而Java里没有头文件,但是有比较类似的用法:import。
**Java里有package关键字的用法。**当一个大型程序交由数个不同的程序人员开发时,很有可能用到相同的类名,所以在java程序开发中为了避免这个问题,提供了一个包的概念,只需要在写的程序第一行使用package关键字来声明一个包。包就是一个文件夹,它将源代码文件(.java)、编译后的文件(.class)和其他的一些用到的文件有组织的放在一起,不同的包对应不同程序人员写的代码,即使有相同类名也不会混淆。
在c++里有一个经典的命名:using namespace std,这行代码使得我们在使用cin、cout、endl……时不用加std::的前缀。而在Java里有import关键字的用法,它同样能让我们在编写程序时省下写前缀的力气。**import与#include有点相似但却不一样,编译器会在import导入的包里选择与类名对应的包,而#include则是编译器将其他文件的内容载入进来。**Java里有一个java.lang包,里面的类经常用到,几乎没有类不用它的, 所以不管有没有写 import java.lang,编译器都会自动补上。
//c++
#include <iostream>
using namespace std;
//java
package com.foundation;
import java.text.DecimalFormat;
- 代码格式不同
C++主要有函数堆砌而成,通过主函数调用其他函数来实现自己的功能;而Java的方法都在类当中,代码风格为几个类的平行,公有类中的主方法调用其他类中的方法,来实现自己的功能。
//c++
#include <iostream>
using namespace std;
void helloWorld(){
cout<<"hello world!";
}
int main(){
helloWorld();
retrn 0;
}
//java
package com.foundation;
class HelloWorld{
void helloWorld(){
system.out.print("hello world.");
}
}
public static void main(Strin args[]){
HelloWorld hw=new HelloWorld();
hw.helloworld();
}
-
函数(方法)的声明与定义
在C++当中,若函数要在主函数中被调用,则一定要在主函数前声明,函数定义的位置随意。
在Java当中就没有那么多限制,主方法可以写在类的任意一个位置,但我们还是习惯将主方法写在类的最下面。 -
编译结果
c++的编译结果是一个可执行文件.exe,而Java程序的编译结果,有多少个类就产生多少个和类同名的class文件。 -
输入输出
在c++中,输入输出十分简单,用输入输出流来控制输入输出,cin\cout。
而在Java语言当中,由于一切的物体都是对象,输入输出就显得麻烦得多,要导入一个基础类。
//java
import java.util.Scanner;
Scanner sc=new Scanner(System.in);
String a=sc.next();
int b=sc.nextInt();
float c=sc.nextFloat();
double d=sc.nextDouble();
boolean e=sc.nextBoolean();
在输入结束后不再需要Scanner了,及时释放内存:
sc.close();
- 数组的设定
c++中声明数组的格式:
int a[10];
数组元素的数据类型 数组名[数组长度];
Java中声明数组的格式:
int a[ ]=new integer[5];
int [ ]a=new integer[5];
声明时赋初值;
int a[ ]={1,2,3,4,5};
int a[ ]=new integer[ ]{1,2,3,4,5};
在数组声明时,不能规定数组的大小;
//以下格式
int a[ ]或in [ ]a;
只是整型数组的引用而整型数组没有实际内存;
- 字符串
c++的字符串在使用前比必须引入头文件,声明时类型为string;
#include <string>
string a = "helloc++"
在java当中字符串并不是一个基本数据类型,是通过String类来调用、处理的,做形式参数的时候,从传入的是引用而不是字符串的内容,String类在java.lang包中,自动导入到java文件内,无需手动导入。
String a = new String("hellojava");
String b1 = "test1";
String b2 = "test1";
String b3 = new String("test1");
//用常字符串创建对象,若内存区没有这个字符串则新建一个
//,若内存区已有这个字符串,则对象引用指向这个字符串;
" == " 用于基本数据类型,判断数据是否相同;
用于复合数据类型(类),判断是否指向同一对象
" equal() " 位于Object类中,用于判断对象引用是否指向同一对象;
String类中,equal()被覆盖,用于判断String对象引用指向的对象字
符串内容是否相同。
-
指针与引用
c++当中有引用有指针,Java当中只有引用没有指针。 -
垃圾回收机制
c++中有析构函数回收垃圾,释放内存空间,要善于使用析构函数和release( )函数释放内存。使用c++时,一定要注意内存的申请和释放。
Java中有自动垃圾回收机制,Java中的所有东西都是类对象,当没有任何对象引用指向一个对象时,这个对象会被视为垃圾对象,在内存不足时会被自动释放。