Hacker News new | ask | show | jobs
by Alupis 4095 days ago
> I know an even lower level language (C++, C) that doesn't have the problem of things which make no sense to be NULL (list elements)

You must null check a lot of things in C, especially since there is no graceful error handling (try/catch blocks)... C certainly allows things to be null (or garbage) values.

> The problem is that Java did away completely with value types and made everything pointer only.

I'm not sure what you are saying here -- the very notion of pointers do not exist in Java. This decision was made while creating the language, and avoids an entire class of programming errors. Java is strictly pass by value.

> the third is the missing for-each construct.

I completely agree with you here. Java does have a for-each construct, and it's recommended to use whenever possible. It avoids an entire class of programming errors.

2 comments

> I'm not sure what you are saying here -- the very notion of pointers do not exist in Java. This decision was made while creating the language, and avoids an entire class of programming errors. Java is strictly pass by value.

To clarify: the GP is probably referring to boxed and unboxed data types. IIRC, Java has some unboxed data types ("primitive" types?), but mostly everything is boxed behind a pointer.

> but mostly everything is boxed behind a pointer.

Behind a Reference would be more accurate. It's just a reference to a spot in the heap. Other than similarly "pointing" to a place in memory, the comparison between Java References and C Pointers stops there. One cannot pass a "pointer" in Java, nor can the pointer be free-form manipulated like in pointer-arithmetic.

My statement is perfectly accurate in the context, which is discussing the representation of Java types.

Java doesn't hold a monopoly on the word "pointer." For example, Go has pointers but doesn't allow pointer arithmetic in safe code. Similarly for Rust.

> You must null check a lot of things in C, especially since there is no graceful error handling (try/catch blocks)... C certainly allows things to be null (or garbage) values.

You are correct that adding C as an example language was wrong. C++ on the other hand still stands.

> I'm not sure what you are saying here -- the very notion of pointers do not exist in Java

Java references are just C pointers without pointer arithmetic.