Operador Ternario de Java y NullPointerException [Duplicar] -- java campo con nullpointerexception campo con ternary-operator camp Relacionados El problema

Java ternary operator and NullPointerException [duplicate]


1
vote

problema

Español
Esta pregunta ya tiene una respuesta aquí :
Comportamiento extraño de Java. Operador ternario (1 respuesta)
cerrado 7 años .

Hola, me encontré con un problema en las obras, la pregunta como esta:

  Integer test1=null; Integer test2=null;   

Los llamo así:

  test2=(test1==null?test1:(test1+1)); test2=(test1==null?test1:-1);   

Luego, la Java lanza una nullPointerException, así que, por lo que escribe otro código como este:

  test2=(test1==null?test1:test1);    

Este código está bien.

Pero, ¿por qué?

Original en ingles

hixefxbcx8cI encountered a problem in worksxefxbcx8cthe question like this:

Integer test1=null; Integer test2=null; 

i call them like this:

test2=(test1==null?test1:(test1+1)); test2=(test1==null?test1:-1); 

then the java throw a NullPointerException,so iwrite another code like this:

test2=(test1==null?test1:test1);  

this code is ok.

but,why?

        
     
     

Lista de respuestas

7
 
vote
vote
La mejor respuesta
 

aquí

  test2=(test1==null?test1:(test1+1));   

La expresión volverá a devolver un int , no un Integer .

Por lo tanto, el JVM se incluirá en test1 , y luego el resultado. Si Ubox A null , lanzará un NPE.

e.g. prueba esto:

      Integer a = null;     int b = a;   

obtendrás un NPE en la segunda línea. pero seguramente esta es una simple asignación de enteros!? No es así. Es unboxing el nulo.

Aconsejaría fuertemente contra la mezcla Integers y int Cuando App.DocumentsController = Ember.ArrayController.extend({ subview: function(document) { var documents = App.Document.find({type_id: document.get("typeId")}); Ember.run.next(this, function() { return this.transitionTo('documentsFiltered', documents); }); } }); 0 está involucrado. Es una pesadilla completa completa para resolver estos problemas (estoy mirando estas cosas en este momento que involucran llamadas de métodos que devuelven App.DocumentsController = Ember.ArrayController.extend({ subview: function(document) { var documents = App.Document.find({type_id: document.get("typeId")}); Ember.run.next(this, function() { return this.transitionTo('documentsFiltered', documents); }); } }); 111111188776612 y pasando nulo alrededor. Un simple retorno del método se explica inesperadamente).

Si tiene un resultado entero 'opcional', entonces le recomendaría no usando null, y más bien, algún tipo de opcional wrapper.

 

Here

test2=(test1==null?test1:(test1+1)); 

the expression is going to return an int, not an Integer.

So the JVM will unbox test1, and later box the result. If you unbox a null, it will throw an NPE.

e.g. try this:

    Integer a = null;     int b = a; 

You'll get an NPE at the second line. But surely this is a simple integer assignment!? Not so. It's unboxing the null.

I would strongly advise against mixing Integers and int when null is involved. It is a complete nightmare to resolve these issues (I'm looking at such stuff right now involving method calls returning ints and Integers, and passing null around. A simple method return blows up unexpectedly).

If you have an 'optional' integer result, then I would recommend not using null, and rather some sort of Optional wrapper.

 
 
2
 
vote
  App.DocumentsController = Ember.ArrayController.extend({     subview: function(document) {         var documents = App.Document.find({type_id: document.get("typeId")});         Ember.run.next(this, function() {             return this.transitionTo('documentsFiltered', documents);         });     } }); 3  

es equivalente a

  App.DocumentsController = Ember.ArrayController.extend({     subview: function(document) {         var documents = App.Document.find({type_id: document.get("typeId")});         Ember.run.next(this, function() {             return this.transitionTo('documentsFiltered', documents);         });     } }); 4  

Tenga en cuenta que nunca puede hacer ninguna operación en NULL (aquí está haciendo Test1 + 1, que es equivalente a NULL + 1. De ahí la excepción del puntero nulo)

Codificación feliz :)

 
test2=(test1==null?test1:(test1+1)); 

is equivalent to

   if(test1==null) {     test2 = test1; }  else{     test2 = test1 + 1;     } 

Please note you can never do any operation on null (Here you are doing test1 + 1 which is equivalent to null + 1 . Hence the Null Pointer Exception)

Happy Coding :)

 
 
     
     
0
 
vote

hacer algo como:

  test2=(test1==null?test1: new Integer(test1+1)); test2=(test1==null?test1: new Integer(-1));   
 

Do something like:

test2=(test1==null?test1: new Integer(test1+1)); test2=(test1==null?test1: new Integer(-1)); 
 
 

Relacionados problema

0  Operador de Ruby Ternary  ( Ruby ternary operator ) 
¿Por qué no son estas dos afirmaciones equivalentes? defined? foo ? foo << "bar" : foo = ["bar"] if (defined? foo) then foo << "bar" else foo = ["bar"...

3  ¿Jscript proporciona un operador ternario?  ( Does jscript provide a ternary operator ) 
¿Tenemos un operador ternario en JScript (a diferencia de JavaScript)? Si es así, ¿cuál es la sintaxis? ...

4  Múltiples operaciones en operador ternario  ( Multiple operations in ternary operator ) 
¿Es posible tener múltiples operaciones dentro de un operador de Ternary OFS / ONS? He llegado con un ejemplo a continuación, probablemente no el mejor ejem...

26  ¿Por qué mi expresión ternaria no funciona?  ( Why is my ternary expression not working ) 
Estoy tratando de establecer una bandera para mostrar u ocultar un elemento de página, pero siempre se muestra incluso cuando la expresión es falsa. $canMe...

0  Uso del operador ternario como marcador de posición  ( Usage of ternary operator as placeholder ) 
Tengo una función bubble_sort_linkedlist declarado como, void bubble_sort_linkedList(node *head); La definición de la función (para ordenar en orden ...

1  Sintaxis del operador ternario  ( Ternary operator syntax ) 
¿Estas afirmaciones significan lo mismo? (empty($order)) ? $orderBy="ASC" && $order="down" : (($order=="up") ? $orderBy="ASC" && $order="down" : $orderBy="...

0  Ruby One Liners: intentando comprender una sola línea de código de rubí que tiene una asignación, dos pruebas de igualdad, un operador de ternario y un operador de &&  ( Ruby one liners trying to comprehend single line of ruby code that has an ass ) 
En varios Railscasts, Ryan Bates utiliza este ayudante de "clasificable" personalizado junto con varios métodos de ayuda ( http://railscasts.com/episodes/228-...

0  Ternary o Terser SetClass equivalente  ( Ternary or terser setclass equivalent ) 
Tenemos AddClass, RemoveClass, Toggleclass ¿Qué es el equivalente de jQuery a document.getElementById("field").className=(someBoolean)?"pass":"fail"; ...

1  Operador Ternario. Tipos de conversión automáticamente en la condición  ( Ternary operator automatically types conversion in condition ) 
Si uso solo unsigned TIPOS EN LA CONDIDENTE DEL OPERADOR TERNERARIO, ¿se convertirán estos unsigned las variables se convertirán automáticamente en signe...

85  ?: ?? Operadores en lugar de si | otra cosa  ( Operators instead of ifelse ) 
public string Source { get { /* if ( Source == null ){ return string . Empty; } else { return Source;...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos