+
no es un ejemplo de sobrecarga del operador. +
está integrado en el lenguaje como operador de concatenación y operador de suma aritmética.
Lo que esto significa es que una persona que escribe un programa con Java no puede sobrecargar operadores, pero en lo que respecta a la gramática del lenguaje Java, +
se define como una concatenación y un operador adicional.
EDITAR
Funciona para otras clases, tales como Integer
y Double
debido autoboxing.
Si observa el bytecode de un programa Java que realiza la concatenación de cadenas, verá que crea StringBuilder
y utiliza el método append()
. El compilador de Java ve el operador +
y se da cuenta de que los operandos son cadenas y no tipos primitivos (como int
).
Si observa el bytecode de un programa que agrega números enteros, verá que usa la instrucción iadd
para realizar una suma entera. Esto se debe a que el compilador se da cuenta de que los operandos a la operación +
son enteros.
En cuanto a hacer algo como Integer i = 4
, el bytecode mostrará que realmente está haciendo Integer i = Integer.valueOf(4)
. Esto se llama autoboxing.Más tarde, cuando haces algo como i + p
, donde tanto i
y p
son de tipo Integer
, el bytecode generado mostrará que usted está haciendo i.intValue() + p.intValue()
, donde los tipos de retorno de ambos métodos son int
(la instrucción real de código de bytes de nuevo, es iadd
)
Es por eso que +
funciona Integer
aunque no sean tipos primitivos reales.
¡Gracias! ¿Hay alguna lista con todas las clases que soporte el autoboxing? – VextoR
Autoboxing existe para 'int',' float', 'double',' boolean', 'short', y' byte' Creo. –