¿Es la palabra clave `new` en java redundante?

Vengo de C ++, así que hay una característica de Java que no entiendo del todo. He leído que todos los objetos deben crearse usando la palabra clave new , con la excepción de primitivos. Ahora, si el comstackdor puede reconocer un tipo primitivo y no le permite crear un objeto llamando a su constructor sin new , ¿cuál es el motivo para que la palabra clave sea new ? ¿Podría alguien proporcionar un ejemplo cuando dos líneas de código, idénticas a excepción de la presencia de new , se comstackn y tienen diferentes significados / resultados?

Solo para aclarar lo que quiero decir con redundante, y espero que mi pregunta sea más clara. ¿ new agregar algo? ¿Se podría haber expresado el idioma sin new para la creación de instancias de objetos a través de un constructor?

Los métodos y constructores pueden tener el mismo nombre.

 public class NewTest { public static void main(final String[] args) { TheClass(); new TheClass(); } static void TheClass() { System.out.println("Method"); } static class TheClass { TheClass() { System.out.println("Constructor"); } } } 

Si esta elección de diseño de lenguaje fue una buena idea es discutible, pero así es como funciona.

Lo creas o no, requerir el uso de lo new para los constructores es una cuestión de espacio de nombres. Lo siguiente comstack muy bien:

 public class Foo { public Foo() {} public void Foo() {} } 

No entiendo por qué los diseñadores de Java decidieron agregar la new statement al lenguaje java, pero no quiero perderla. Incluso si pudiera ser redundante si no se permitiera dar clases, métodos y campos del mismo nombre, como otros ya han mostrado en sus respuestas:

Porque – mejora enormemente la legibilidad. Cada vez que leo esa new statement, me doy cuenta inmediatamente de que nace un nuevo objeto.

Si vino de C ++, ¿por qué está sorprendido? ¿C ++ no tiene el mismo new , para el mismo propósito? Java intenta seguir la mayoría de la syntax C / C ++, esa es probablemente la razón.

Comentando la respuesta de artbristol: es altamente improbable que los diseñadores de Java establecieron espacios de nombres primero, y luego se vieron obligados a agregar una nueva palabra clave. Es muy probable que ocurra lo contrario: primero apareció el primero y luego descubrieron que les permite tener nombres de constructores que colisionan con otros nombres.

El new debe escribirse en Java para crear una nueva instancia de objeto.

 public class Foo { public void test() { final Foo foo1 = new Foo(); final Foo foo2 = Foo(); } public Foo Foo() { System.out.println("hello world"); return this; } } 

Tenga en cuenta que los métodos que comienzan con un carácter en mayúsculas se desaconsejan en Java para evitar la confusión.