Conversió de tipus

En aquesta activitat aprendràs les distintes formes de convertir un valor d'un tipus a un altre tipus.

Aprendràs:

Casting (implícit i explícit). Mètodes de conversió.

Casting

La conversió entre tipus primitius es realitza mitjançant el casting. Java proporciona dos tipus de casting: implicit i explícit. L'implicit es realitza automàticament, mentre que l'explicit l'hem d'escriure nosaltres.

Casting implicit

El compilador realitza automàticament el casting implícit quan el tipus al que s'ha de convertir una dada és més ampli que el tipus original.

És a dir, Java farà el casting implícit automàticament quan convertim:

Per exemple:

float foo = 'a'; // convertim el char 'a' a float. El valor de foo sera 97.0f int bar = 'a'; // convertim el char 'a' a int. EL valor de bar sera 97 float baz = 97; // convertim el int 97 a float. El valor de baz sera 97.0f

Si tractem de fer un casting implícit a l'inrevés, el compilador ens donarà un error:

char bar = 65633; // error, casting implicit de int a char no permes char baz = 97f; // error, casting implicit de float a char no permes int qux = 97f; // error, casting implicit de float a int no permes

El casting amb els tipus boolean i String no es pot realitzar.

Casting explícit

Hem vist que el casting implícit no es pot realitzar quan volem convertir a un tipus més estret (per exemple, convertir de float a int, ja que es perden els decimals). Però a voltes necessitem fer-ho, tot sabent que perdrem precisió. En aquest cas hem d'explicitar el casting.

Per a realitzar un casting explícit, s'ha d'escriure el tipus al que es vol convertir entre parèntesi, just abans del valor que es vol convertir.

(tipus) valor

Els següents exemples il·lustren l'ús del casting explícit:

// de int a char char bar = (char) 65633; // bar es 97 (el valor màxim de char es 65535) // de float a char char baz = (char) 97.53f; // baz es 97, es perden els decimals // de float a int int quux = (int) 14.67565f; // quux es 14, es perden els decimals // de int a char int fooa = 65633; char bar = (char) fooa; // bar es 97, el valor màxim de char es 65535 // de float a char float foob = 97.53f; char baz = (char) foob; // baz es 97, es perden els decimals // de float a int float fooc = 14.67565f; int quux = (int) fooc; // quux es 14, es perden els decimals float foo = 5 / 2; // foo es 2.0f float bar = (float) 5 / 2; // bar es 2.5f

Selecciona les línies on es requereix el casting explícit.

float a = 10; int b = a; char d = a; float c = b; int e = d; char f = c;
1 2 3 4 5 6
Arrodonir la nota
Unicode points

Conversió textual

A més a més de les conversions amb casting, Java incorpora una sèrie de mètodes per a fer altres conversions.

Concatenació

Es pot convertir qualsevol valor en un String només concatenant-lo amb un String buit "".

String foo = "" + 'a'; // foo es "a" String bar = "" + 865; // bar es "865" String baz = "" + 23.78f; // baz es "23.78" String quux = "" + true; // quux es "true"

String.valueOf()

De forma equivalent a la concatenació, es pot utilitzar el mètode String.valueOf() per a convertir a String.

String foo = String.valueOf('a'); // foo es "a" String bar = String.valueOf(865); // bar es "865" String baz = String.valueOf(23.78f); // baz es "23.78" String quux = String.valueOf(true); // quux es "true"

charAt()

Lògicament, no podem convertir un String en un char, ja que l'String pot tenir varis caracters. Però podem usar el mètode charAt() per a obtenir un caracter que estigui en una determinada posició.

char foo = "java8".charAt(0); // foo es 'j' char baz = "java8".charAt(4); // baz es '8'

Cal tenir en compte que les posicions comencen per 0.

Character.getNumericValue()

Al punt anterior hem vist que si fem el casting implícit per a convertir un char en un int, obtenim el valor Unicode del caracter.

Si volem obtenir el valor que representa el caracter es pot fer amb el mètode Character.getNumericValue().

char foo = '9'; int bar = foo; // bar es 57, amb el casting obtenim el valor unicode int baz = Character.getNumericValue(foo); // baz es 9, obtenim el valor representat pel caracter

parseInt() i parseFloat()

Per a obtenir el valor numèric representat per un String podem utilitzar parseInt() o parseFloat().

String foo = "213"; int bar = Integer.parseInt(foo); // bar es 213 String foo = "23.78"; float bar = Float.parseFloat(foo); // bar es 23.78f

Notació algebraica als escacs
Prova mecanogràfica