Tipuri Primitive de Date și Array-uri
Tipuri primitive de date în Java
Java este un limbaj de programare puternic tipizat, ceea ce înseamnă că fiecare variabilă trebuie să aibă un tip de date declarat.
Cele 8 tipuri primitive
Tip | Dimensiune | Valori | Valoare implicită | Exemplu |
---|---|---|---|---|
byte |
8 biți | -128 la 127 | 0 | byte varsta = 25; |
short |
16 biți | -32,768 la 32,767 | 0 | short populatie = 10000; |
int |
32 biți | -2^31 la 2^31-1 | 0 | int numere = 123456; |
long |
64 biți | -2^63 la 2^63-1 | 0L | long distanta = 9876543210L; |
float |
32 biți | Aproximativ ±3.40282347E+38F | 0.0f | float temperatura = 36.6f; |
double |
64 biți | Aproximativ ±1.79769313486231570E+308 | 0.0d | double PI = 3.14159265359; |
char |
16 biți | 0 la 65,535 | ‘\u0000’ | char litera = 'A'; |
boolean |
1 bit | true sau false | false | boolean esteCorect = true; |
Caracteristici ale tipurilor primitive
- Nu sunt obiecte, deci nu au metode asociate
- Sunt stocate direct în stiva de memorie (nu pe heap)
- Sunt mai eficiente din punct de vedere al performanței
- Numele tipurilor primitive încep cu literă mică
- Au valori implicite când sunt declarate ca variabile de instanță
Exemple de declarare și inițializare
// Declarare
int numar;
double medie;
// Inițializare
numar = 10;
medie = 8.75;
// Declarare și inițializare în același timp
int varsta = 20;
char gen = 'M';
boolean esteStudent = true;
Conversii între tipuri primitive (casting)
Conversii implicite (widening)
byte b = 100;
int i = b; // Un byte poate fi automat convertit la int
Conversii explicite (narrowing)
int i = 100;
byte b = (byte)i; // Necesită cast explicit
Array-uri în Java
Array-urile sunt structuri de date care stochează mai multe valori de același tip.
Caracteristici ale array-urilor
- Sunt obiecte în Java
- Au lungime fixă (nu poate fi modificată după creare)
- Indexarea începe de la 0
- Pot stoca tipuri primitive sau referințe la obiecte
- Pot fi unidimensionale sau multidimensionale
Declarare și inițializare a array-urilor
Unidimensionale
// Declarare
int[] numere;
String[] nume;
// Creare (alocare memorie)
numere = new int[5]; // Array de 5 elemente de tip int
nume = new String[3]; // Array de 3 elemente de tip String
// Declarare și creare în același timp
double[] preturi = new double[10];
// Declarare, creare și inițializare cu valori specifice
char[] vocale = {'a', 'e', 'i', 'o', 'u'};
int[] puncte = {10, 20, 30, 40, 50};
Multidimensionale
// Declarare și creare
int[][] matrice = new int[3][4]; // Matrice 3x4
// Declarare, creare și inițializare
int[][] tabla = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
Accesarea elementelor dintr-un array
int[] numere = {10, 20, 30, 40, 50};
// Accesarea elementelor
int primulElement = numere[0]; // 10
int ultimulElement = numere[4]; // 50
// Modificarea valorilor
numere[2] = 35; // Acum array-ul este {10, 20, 35, 40, 50}
Parcurgerea array-urilor
Folosind bucla for tradițională
int[] numere = {10, 20, 30, 40, 50};
for (int i = 0; i < numere.length; i++) {
System.out.println("Elementul " + i + ": " + numere[i]);
}
Folosind bucla for-each (enhanced for)
int[] numere = {10, 20, 30, 40, 50};
for (int numar : numere) {
System.out.println("Valoare: " + numar);
}
Manipularea array-urilor cu clasa Arrays
Java oferă clasa utilitară java.util.Arrays
pentru diverse operații pe array-uri:
import java.util.Arrays;
int[] numere = {30, 10, 50, 20, 40};
// Sortare
Arrays.sort(numere); // Acum array-ul este {10, 20, 30, 40, 50}
// Căutare binară (doar în array-uri sortate)
int pozitie = Arrays.binarySearch(numere, 30); // Returnează 2
// Umplere cu o valoare
Arrays.fill(numere, 0); // Acum array-ul este {0, 0, 0, 0, 0}
// Comparare
int[] a = {1, 2, 3};
int[] b = {1, 2, 3};
boolean suntEgale = Arrays.equals(a, b); // true
// Conversie la String
String sir = Arrays.toString(numere); // "[0, 0, 0, 0, 0]"
Exemplu complet
public class ExempluTipuriSiArrayuri {
public static void main(String[] args) {
// Tipuri primitive
int varsta = 20;
double medie = 9.5;
char grupa = 'A';
boolean absolvent = false;
System.out.println("Vârsta: " + varsta);
System.out.println("Media: " + medie);
System.out.println("Grupa: " + grupa);
System.out.println("Absolvent: " + absolvent);
// Array de numere
int[] note = {8, 9, 10, 7, 9};
// Calcularea sumei și mediei notelor
int suma = 0;
for (int nota : note) {
suma += nota;
}
double mediaNote = (double) suma / note.length;
System.out.println("\nNotele: " + Arrays.toString(note));
System.out.println("Media notelor: " + mediaNote);
// Array bidimensional - orar săptămânal
String[][] orar = {
{"Matematică", "Fizică", "Informatică"},
{"Engleză", "Istorie", "Sport"},
{"Programare", "Baze de date", "Rețele"}
};
System.out.println("\nOrarul pentru primele 3 zile:");
for (int i = 0; i < orar.length; i++) {
System.out.print("Ziua " + (i + 1) + ": ");
for (int j = 0; j < orar[i].length; j++) {
System.out.print(orar[i][j]);
if (j < orar[i].length - 1) {
System.out.print(", ");
}
}
System.out.println();
}
}
}
Sfaturi pentru folosirea tipurilor primitive și a array-urilor
- Alegeți întotdeauna tipul primitiv potrivit pentru a economisi memorie
- Folosiți
final
pentru constantele care nu se vor schimba - Verificați întotdeauna limitele array-ului pentru a evita excepțiile
ArrayIndexOutOfBoundsException
- Folosiți Arrays.toString() pentru afișarea rapidă a conținutului unui array
- În aplicații reale, considerați folosirea colecțiilor (ArrayList, HashMap) în locul array-urilor simple pentru mai multă flexibilitate
Exerciții practice
- Creați un array de 5 numere întregi și calculați suma lor
- Creați un array de string-uri cu numele prietenilor voștri și afișați-le în ordine alfabetică
- Creați o matrice 3x3 de numere întregi și calculați suma pe diagonala principală
- Implementați un program care inversează elementele unui array
- Creați un program care găsește elementul maxim și minim dintr-un array de numere