1.变量类型vs数据类型:
- 在C语言中,你需要声明变量类型如
int
,float
,char
等。Java中也有类似的数据类型,如int
,float
,char
,但Java还引入了boolean
类型,并且不需要像C语言那样明确指定变量是否可变(如final关键字在Java中用于定义常量)。 - 基本数据类型的赋值是直接赋值,复合数据类型的赋值是地址引用。也就是说,当你将一个复合数据类型的引用赋给另一个变量时,你实际上是在复制这个引用,而不是复制整个对象或数组。因此,对原始对象的修改会影响到所有引用该对象的变量。
2.函数vs方法:
- C语言中的函数对应Java中的方法(method)。两者都用于封装一段可重复使用的代码,接受参数并可返回值。Java中每个类的方法默认属于该类,且必须定义在类中,这与C语言中的函数可以在文件的任何地方定义有所不同。
3. 内存管理vsGC:
- C语言中,程序员需要手动分配和释放内存(使用
malloc
、calloc
分配,free
释放)。而Java有垃圾回收机制(Garbage Collection, GC),自动管理内存的分配和回收,减少了内存泄漏和悬挂指针的风险。
System.gc();
4.结构体vs类
- 在C语言中,结构体是一种复合数据类型,允许你组合不同类型的数据成员。例如,定义一个表示学生的结构体:
struct Student {
char* name;
int age;
float score;
};
你可以创建结构体变量(实例)并分配内存:
struct Student stu1;
stu1.name = "Alice";
stu1.age = 20;
stu1.score = 85.0;
Java中的类可以看作是C语言结构体的扩展和增强版。类不仅仅包含了数据(即成员变量,类似于C语言中的结构体成员),还包含了操作这些数据的函数(即成员方法,也就是通常所说的对象的行为)。类是通过关键字class
定义的,例如:
public class Student {
String name;
int age;
double score;
// 构造方法,用于初始化对象
public Student(String n, int a, double s) {
name = n;
age = a;
score = s;
}
// 成员方法,用于描述对象行为
public void display() {
System.out.println(name + "的年龄是 " + age + ",成绩是 " + score);
}
}
5.结构体变量vs对象
在C语言中,当你声明一个结构体变量时,你是在创建一个具体的实例。在Java中,当你基于类创建一个实例时,这个实例被称为对象。创建对象的过程就像是根据类(蓝图)制造具体的产品一样。例如,创建一个Student
对象:
Student stu1 = new Student("Bob", 21, 90.0);
stu1.display(); // 输出:Bob的年龄是 21,成绩是 90.0
6.开放vs封装
Java中的类还强调了封装的概念,即隐藏对象的内部状态(成员变量)并提供公共的接口(成员方法)来与对象进行交互。这一点在C语言中较难实现,因为结构体成员通常是公开的,但在Java中,可以使用访问修饰符(如private
, public
)来控制成员的可见性。
总结
从C语言过渡到Java,可以将类想象为增强版的结构体,它不仅包含了数据成员,还有功能成员(方法)。对象则是根据类的定义创建的实例,每个对象都有其独立的内存空间和状态。