problema de programación

alguien me puede ayudar con esta pregunta?

¿Qué diferencia hay entre los siguientes casos?

a) char Str1 [] = "arduino";
b) String Str2 = “arduino”;
c) char Str3 [] = {a,r,d,u,i,n,o};
d) byte Str4 [] = {97, 114, 100, 117, 105, 110, 111};

a) Es un array de carácteres que lo inicalizas con la cadena "arduino". Al tratarse de una cadena añade un 0, (el numero cero, no el caracter 0), al final para delimitar su tamaño.

b) Es un objeto String, o cadena, "dentro" almacena la cadena "arduino". Al ser un objeto, se ha de tratar como lo que es y tienes métodos para tratar con ella.

c) Es un error de programación. El compilador intentará buscar las variables a, r, d, u, i, n, o y a cada posicion del array intentará asignarle dicho valor. Si las variables existen bien, sino, error al canto.

d) Es otro array, pero esta vez, los elementos de dentro son del tipo byte, y lo inicializas con el valor decimal que se corresponde a los caracters de "arduino".

En un principio a), b) y d) pareciera ser lo mismo, pero se trabaja con ellos de manera diferente.

Entre a) y d) la diferencia es "casi" poca. Pero ten en cuenta que un char es un valor con signo y puede valer entre -128 y 127, y un byte es sin signo, con lo que puede valer de 0 a 255. Puedes tratar un caracter como un byte, pero teniendo en cuenta eso. Cada caracter se codifica como un número, por ejemplo 'a' es 97. Y ese número lo representas en el programa como 'a', pero el compilador lo traduce como 97.

b) Es un objeto. Por lo tanto se trata diferente. Por ejemplo para acceder a un caracter en una posicion usando char [ ] solo tienes que hacer:

char c = str1[0];

y la variable c automaticamente valdrá 'a' (97).

Pero para hacer lo mismo con el objeto String tienes que hacer:

char c = str4.charAt(0);