They're both better for different things. For instance, it's easier to build cross-platform software in Java, but for embedded device firmware you get far better performance from C.
In terms of learning, C (and I really mean C, not C++ or Objective-C) as a comparatively low-level language will require you to learn a lot about how your computer interprets programs, what primitive data types are represented and how they're processed, how memory is managed and what a pointer really is, etc.
All of that will serve you well when you work in higher level languages, from Java to Objective-C to scripting languages like Javascript or PHP.
All that low-level stuff can mean it's more challenging to learn, though, as in addition to learning to debug basic control-flow logic (conditionals, loops, function calls), you'll also have to juggle memory management and data types.
Honestly, I'd recommend learning procedural control flow first with a dynamically-typed scripting language that handles your memory management for you (Javascript, PHP, Python, Ruby, etc).
After that, C to understand the underlying fundamentals (or even a toy assembler if you want to dig deeper); then an object-oriented language (whether that's Java, Objective-C, or going back to Ruby or Python) to learn OOP. Functional programming is another paradigm worth learning for the heck of it (Lisp is the ultimate functional language, but it's also one of the most common techniques used in Javascript, among others).