C++、Java、Python比较异同
部分内容截取之前的一篇博客:c++与java的几个不同点
1
python、C++、Java都是强调数据类型的强类型语言。虽然python变量使用前无需声明,但python的变量并不能进行隐式转换。python变量进行转换时实际上是重新创建了一个内存空间。
编程语言按计算机执行方式可分为三种语言:
编译型:先将源代码编译成目标语言之后通过连接程序连接到生成的目标程序进行执行,例如C++。
解释型:由解释器根据输入的数据当场执行而不生成任何的目标程序,例如python。
混合型:两种语言的特征都存在,典型的就是Java。
2
C++可以定义头文件(.h文件)用来防止重复编译,Java和python不需要头文件。
三者均可引入其他源代码文件定义的类等等,比如C++的#include <stdio.h>,Java的import java.lang.;以及python的import itertools
C++:
#include<iostream>
using namespace std;
int main()
{
cout << "Hello World!" << endl;
return 0;
}
Java:
package test; import java.lang.*; public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } }
python:
import itertools print(list(itertools.permutations([\'a\',\'b\',\'c\'], 2)))
3
C++和Java对代码缩进和{}要求不算严格,但是python必须严格遵守代码缩进规则。python的代码块不需要用{}括起来,只要代码缩进相同就认为这上下两行代码属于同一个代码块。
C++
#include<iostream> using namespace std; int main() { cout << "Hello World!" << endl; return 0; }
Java
package test; public class HelloWorld { public static void main(String[] args) { System.out.println(“Hello World!”); } }
python
print("outside1") if __name__ == \'__main__\': print("inside") print("outside2")
4
C++和Java每行代码结尾必须加上“;”,python不需要“;”参考不同点3示例代码
5
C++和Java中++代表+=1,python不能用++,只可以用+=1
C++
#include<iostream> using namespace std; int main() { int i = 0; switch(i){ case 0: cout << "false" << endl; break; case 1: cout << "true" << endl; break; default: if(i == 2){ cout << 2 << endl; } else if(i > 2) { cout << "大于2" << endl; } else { cout << "小于0" << endl; } } while(i<=10){ if(i % 2 == 0){ cout << i << endl; } i++; } return 0; }
Java
package test; public class Test { public static void main(String[] args) { int i=0; switch(i){ case 0: System.out.println("false"); break; case 1: System.out.println("true"); break; default: if(i == 2){ System.out.println(2); } else if(i > 2) { System.out.println("大于2"); } else { System.out.println("小于0"); } } while (i <= 10){ if (i % 2 == 0){ System.out.println(i); } i++; } } }
python
i = 0 if i == 0: print("false") elif i == 1: print("true") else: if i == 2: print(2) elif i > 2: print("大于2") else: print("小于0") while i <= 10: if i % 2 == 0: print(i) i += 1
6
C++和Java判断和循环等语句的条件逻辑表达式使用()括起来,python可以不用()。参考不同点5示例代码
7
C++和Java条件语句为if……else if……else,选择语句为switch,循环语句有while、do……while,python条件语句为if……elif……else,无选择语句,使用条件语句代替选择语句,循环语句只有while。参考不同点5示例代码。
8
C/C++程序基本上是由n个函数组成,主函数调用其他函数实现所需功能。但是主函数内要使用的函数必须在主函数之前有过声明或定义,否则编译会不通过。即C/C++主方法要么写在所有定义了的被调用函数后面,要么在主函数之前就必须有所调用函数的声明。
Java程序是由n个类、m个方法组成,某个public类的主方法调用当前类的方法,或是调用其他类的公有(public)方法实现所需功能。主方法可以写在与类内被调用方法同级的任意位置。
python的主函数是个判断语句“if __name__ == \’__main__\’:”,但实际上只要没有缩进就默认该代码为主函数中的代码。python和C++较为相似,但不存在声明的说法,只能在定义的函数之后进行调用。
C++
#include<iostream> //头文件,必写 using namespace std; //命名空间 void hello(); //如果某个函数是在主函数之后定义的,那么必须在主函数之前声明,主函数才能调用这个函数 int main() { hello(); return 0; } void hello() { cout << "Hello World!" << endl; }
Java
package java.xingchen; //说明在java/xingchen这个文件夹内 import java.lang.*; //导包语句,可不写,编译器自动加 //Java程序运行的是public类内的主方法 //文件名必须和public类类名一样(例如当前文件只能叫Xingchen.java),一个文件只能存在一个public类,主方法只能在public类内 //类只能由public修饰,即一个类只能是public class或class public class Xingchen { public static String out; //静态方法(static)调用该变量,那么该变量必须为静态变量(static) public Xingchen(){ //空参构造方法,当前类实例化时如果未传参则执行此方法,一般空参构造方法可不写 this.out = "World"; //this是指当前类 } public static void main(String[] args) { new Test("Hello").hello(); //Test类创建匿名对象并执行类内的public方法 Xingchen x = new Xingchen(); x.hello(); } public static void hello(){ System.out.println(out); } } class Test { String out; public Test(){} //如果一个类存在有参构造,那么必须定义空参构造方法 public Test(String str){ //有参构造方法,实例化时如果传入指定参数,则执行当前方法 this.out = str; } public void hello(){ System.out.println(this.out); } }
python
def hello(): print("Hello World!") if __name__ == \'__main__\': hello()
9
c++的录入输出靠输入流cin,输出流cout、cerr、clog实现,需要写#include<iostream>。
cin >> a;
cout << a << endl;
Java语言里没有像c++那样一个函数就完成录入,它的录入使用了一些基础类。
首先导包
import java.util.Scanner;
然后在方法内使用以下语句进行录入
Scanner sc = new Scanner(System.in); String a = sc.next(); //效果等同于String a = sc.nextLine(); int b = sc.nextInt(); float c = sc.nextFloat(); double d = sc.nextDouble(); boolean e = sc.nextBoolean(); sc.close(); //结束数据流。录入语句结束及时释放内存是个好习惯。
其实还有其他输入的方法,但是这种比较常用。Scanner类中没有nextChar方法,不能直接通过Scanner类从控制台读取char类型的变量
Java的输出语句用法很简单:System.out.println();或System.out.print();System.out.println语句结束后自动换行,System.out.print语句结束后不换行。
int age = 18; String name = "张三"; System.out.println(age + "岁的" + name); //18岁的张三
python输入靠input()函数,返回的是string类型,输出靠print()函数。
a = input() print(a)
10
C++基本数据类型为布尔型 bool、字符型 char、整型int、浮点型float、双浮点型double、无类型void、宽字符型 wchar_t。
Java语言提供了八种基本类型。四个整数型(byte、short、int、long),两个浮点型(float、double),一种字符类型(char),还有一种布尔型(boolean)。
Python3有六个标准数据类型:不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。
C++和Java中,变量在使用前必须声明,python直接赋值使用,不声明。
在 Python 中,变量就是变量,它没有类型,我们所说的”类型”是变量所指的内存中对象的类型