Java and C are both general purpose programming languages but differ in key ways. Java is an object-oriented language that allows code to run on any platform, while C is a procedural language used to develop operating systems and databases. Some main differences are that Java uses automatic memory management via garbage collection, only supports call by value, and variables can be declared anywhere within a block. C requires manual memory management and supports call by value and reference.