¿Por qué Java requiere un signo de doble igual?

¿Por qué Java requiere un doble signo igual (==) al comparar enteros en una ifdeclaración?

Por ejemplo

if(x = 3.141)
     System.out.println("x is equal to pi.");

es incorrecto, debería ser

if(x == 3.141)
     System.out.println("x is equal to pi.");

Sé que "==" se usa para comparar enteros y "=" se usa para establecer un valor entero, pero ¿por qué en una ifdeclaración esto sigue siendo cierto?

¿Se le permite incluso asignar un valor a una variable en una declaración if (o iniciar una nueva variable)?

¿Hay alguna razón por la que alguien quiera asignar a una variable un nuevo valor dentro de una ifdeclaración (si es así, proporcione un ejemplo)?

Esta parece una pregunta que ya debería tener una respuesta, pero no pude encontrar una aquí o usando Google, si esta es una pregunta duplicada, dígame y la eliminaré de inmediato.

Respuesta 1

Historia de los lenguajes de programación 101:

  • Fortran usa =para ambos.
  • Algol introducido :=para asignación y utilizado =para comparación. Esto fue necesario para resolver una ambigüedad gramatical.
  • Pascal hizo lo mismo.
  • PL / 1 no lo hizo.
  • No puedo hablar por B o BCPL, pero cuando obtuvimos C fue =por asignación y ==para comparación, nuevamente para resolver una ambigüedad gramatical
  • C ++ siguió a C
  • Java siguió a C ++ en muchos aspectos, incluido este.

La ambigüedad gramatical surge debido a permitir asignaciones en expresiones. Contrariamente a su afirmación, if (x = true)es legal en Java si xes de tipo booleano .

Respuesta: 2

==es el comparador de identidad, que funciona tanto para objetos como para primitivas. Responde a la pregunta "son las dos cosas la misma cosa".

=es el operador de asignación. Establece el valor del lado izquierdo al lado derecho.

Las cosas pueden volverse defectuosas cuando usas tu ejemplo con booleanos:

boolean b;

if (b = true) // This compiles, but is a bug, because it sets b, not tests it

Si bien otros tipos no se compilan con esta sintaxis, booleany lo Booleanhacen, por eso se recomienda el siguiente patrón:

if (b)
Respuesta: 3

absolutamente puede asignar una variable en una declaración if. Además, así es como funciona: =siempre es asignación y ==siempre es comparación.

Respuesta: 4

Estoy escribiendo algún software en Java. Estoy probando la funcionalidad de administración de cookies pero parece que no puedo hacer que las cookies funcionen. Escribí un PHP rápido que elimina una cookie, y lo probé en mi navegador ...

He guardado un objeto en una lista de matriz y guardado el archivo como .dat, pero cuando quiero leer el objeto, simplemente muestra nulo y no los valores. La clase public class Person implementa ...

Soy nuevo en GWT y estaba buscando usar Twitter Bootstrap para un marco CSS. Pero luego me encontré con gwt-bootstrap, que se considera una forma de usar Bootstrap en una aplicación GWT. Como soy tan nuevo en ...

¿Conoces la función de buscar todas las referencias de eclipse (Buscar> Referencias> Espacio de trabajo o Ctrl-Shift-G)? ¿Cómo puedo ejecutar eso mediante programación? Tengo una gran base de código que necesito auditar por seguridad ...