Java のデータ型
Javaは言語です 強く類型化された: 各変数は必ず 宣言された型があり、コンパイラは操作が以下であることをチェックします。 そのタイプと互換性があります。これにより、多くの実行時エラーが防止されます。
何を学ぶか
- プリミティブ型とその範囲
- 変数、定数、スコープ
- 算術演算子、論理演算子、関係演算子
- 制御構造: if、switch、for、while
- キャストと型変換
プリミティブ型
Java には 8 つのプリミティブ型があり、整数、10 進数、整数、10 進数の 4 つのカテゴリに分類されます。 文字とブール値。
整数型
// byte: 8 bit, da -128 a 127
byte etaStudente = 16;
byte maxVoto = 127;
// short: 16 bit, da -32,768 a 32,767
short annoNascita = 2008;
short giorniAnno = 365;
// int: 32 bit, da -2^31 a 2^31 - 1 (circa 2 miliardi)
int popolazioneClasse = 25;
int matricola = 123456789;
// long: 64 bit, per numeri molto grandi
long popolazioneMondiale = 8_000_000_000L; // nota la L finale
long millisecondiFondazione = 1704067200000L;
概要表
| タイプ | 少し | 範囲 | 一般的な使用方法 |
|---|---|---|---|
| バイト | 8 | -128~127 | 学年、年齢 |
| 短い | 16 | -32.768 ~ 32.767 | 何年も何日も |
| 整数 | 32 | 約±20億 | カウンター、ID |
| 長さ | 64 | 非常に大きな数 | タイムスタンプ、人口 |
10 進数型 (浮動小数点)
// float: 32 bit, precisione singola (6-7 cifre)
float mediaVoti = 7.5f; // nota la f finale
float temperatura = 36.6f;
// double: 64 bit, precisione doppia (15-16 cifre)
double pi = 3.141592653589793;
double mediaMatematica = 8.25;
double percentualePromossi = 87.5;
float と double を使用する場合
- ダブル: 小数のデフォルト、より正確
- フロート: メモリを節約する必要がある場合(グラフィックス、ゲーム)のみ
- 決してお金のためではありません: アメリカ合衆国
BigDecimal財務計算用
文字とブール値
// char: 16 bit, un singolo carattere Unicode
char iniziale = 'M';
char votoLettera = 'A';
char simbolo = '€';
char unicode = '\u0041'; // 'A' in Unicode
// boolean: vero o falso
boolean isPromosso = true;
boolean haDebiti = false;
boolean maggiorenne = etaStudente >= 18;
変数と定数
宣言と初期化
// Dichiarazione
int voto;
// Inizializzazione
voto = 8;
// Dichiarazione e inizializzazione insieme
int altroVoto = 9;
// Dichiarazioni multiple
int italiano = 7, matematica = 8, storia = 6;
// var (Java 10+): inferenza di tipo
var nomeStudente = "Mario Rossi"; // inferisce String
var mediaClasse = 7.5; // inferisce double
最終的な定数
// Costanti: valore immutabile
final int VOTO_MASSIMO = 10;
final int VOTO_MINIMO = 1;
final double SOGLIA_PROMOZIONE = 6.0;
final String NOME_SCUOLA = "Liceo Einstein";
// Tentare di modificare una costante causa errore di compilazione
// VOTO_MASSIMO = 11; // ERRORE!
変数の範囲
public class RegistroClasse {
// Variabile di istanza (visibile in tutta la classe)
private int numeroStudenti = 25;
public void stampaStatistiche() {
// Variabile locale (visibile solo nel metodo)
int sommaVoti = 0;
for (int i = 0; i < numeroStudenti; i++) {
// Variabile di blocco (visibile solo nel for)
int votoCorrente = ottieniVoto(i);
sommaVoti += votoCorrente;
}
// votoCorrente non e più accessibile qui!
double media = (double) sommaVoti / numeroStudenti;
System.out.println("Media: " + media);
}
}
オペレーター
算術演算子
int a = 10, b = 3;
int somma = a + b; // 13
int differenza = a - b; // 7
int prodotto = a * b; // 30
int quoziente = a / b; // 3 (divisione intera!)
int resto = a % b; // 1 (modulo)
// Divisione decimale
double quozienteReale = (double) a / b; // 3.333...
// Incremento e decremento
int voto = 7;
voto++; // 8 (post-incremento)
++voto; // 9 (pre-incremento)
voto--; // 8 (post-decremento)
// Operatori composti
voto += 2; // equivale a: voto = voto + 2
voto *= 2; // equivale a: voto = voto * 2
関係演算子
int voto = 7;
int sufficienza = 6;
boolean maggiore = voto > sufficienza; // true
boolean minore = voto < sufficienza; // false
boolean uguale = voto == sufficienza; // false
boolean diverso = voto != sufficienza; // true
boolean maggioreUguale = voto >= sufficienza; // true
boolean minoreUguale = voto <= sufficienza; // false
論理演算子
boolean sufficiente = voto >= 6;
boolean eccellente = voto >= 9;
boolean presente = true;
// AND logico (entrambe devono essere true)
boolean promuovibile = sufficiente && presente; // true
// OR logico (almeno una deve essere true)
boolean premiato = eccellente || presente; // true
// NOT logico (inverte il valore)
boolean assente = !presente; // false
// Short-circuit evaluation
// Se la prima condizione e false, la seconda non viene valutata
boolean risultato = false && metodoCostoso(); // metodoCostoso() non eseguito
フロー制御
もし/そうでなければ
int voto = 7;
// if semplice
if (voto >= 6) {
System.out.println("Promosso");
}
// if-else
if (voto >= 6) {
System.out.println("Promosso");
} else {
System.out.println("Bocciato");
}
// if-else if-else (valutazione voti scolastici)
if (voto >= 9) {
System.out.println("Eccellente");
} else if (voto >= 7) {
System.out.println("Buono");
} else if (voto >= 6) {
System.out.println("Sufficiente");
} else {
System.out.println("Insufficiente");
}
// Operatore ternario (if compatto)
String esito = voto >= 6 ? "Promosso" : "Bocciato";
スイッチ
int mese = 9;
String nomeMese;
switch (mese) {
case 1:
nomeMese = "Gennaio";
break;
case 2:
nomeMese = "Febbraio";
break;
case 9:
nomeMese = "Settembre - Inizio scuola!";
break;
case 6:
case 7:
case 8:
nomeMese = "Vacanze estive";
break;
default:
nomeMese = "Altro mese";
}
// Sintassi moderna con arrow
String giudizio = switch (voto) {
case 10 -> "Ottimo";
case 9 -> "Distinto";
case 8 -> "Buono";
case 7 -> "Discreto";
case 6 -> "Sufficiente";
default -> "Insufficiente";
};
// Con blocchi
String descrizione = switch (voto) {
case 10, 9 -> {
System.out.println("Complimenti!");
yield "Eccellenza";
}
case 8, 7 -> "Buon rendimento";
default -> "Da migliorare";
};
forループ
// for classico
System.out.println("Elenco studenti:");
for (int i = 1; i <= 5; i++) {
System.out.println("Studente " + i);
}
// for decrescente
System.out.println("Countdown:");
for (int i = 10; i >= 1; i--) {
System.out.println(i);
}
// for-each (enhanced for)
int[] voti = {7, 8, 6, 9, 8};
int somma = 0;
for (int v : voti) {
somma += v;
}
System.out.println("Somma voti: " + somma);
While ループと do-while ループ
// while: controlla PRIMA di eseguire
int tentativi = 0;
int votoMinimo = 6;
int votoOttenuto = 4;
while (votoOttenuto < votoMinimo && tentativi < 3) {
System.out.println("Tentativo " + (tentativi + 1));
votoOttenuto++; // simula miglioramento
tentativi++;
}
// do-while: esegue ALMENO UNA VOLTA
int risposta;
do {
System.out.println("Menu: 1=Voti, 2=Media, 0=Esci");
risposta = leggiInput();
} while (risposta != 0);
中断して継続する
// break: esce dal ciclo
int[] voti = {7, 8, 3, 9, 8};
for (int voto : voti) {
if (voto < 4) {
System.out.println("Trovato voto gravemente insufficiente!");
break; // esce dal ciclo
}
}
// continue: salta alla prossima iterazione
for (int voto : voti) {
if (voto < 6) {
continue; // salta i voti insufficienti
}
System.out.println("Voto sufficiente: " + voto);
}
キャストと変換
// Widening (implicito): da tipo più piccolo a più grande
int votoIntero = 8;
double votoDouble = votoIntero; // 8.0 (automatico)
// Narrowing (esplicito): da tipo più grande a più piccolo
double media = 7.8;
int mediaIntera = (int) media; // 7 (troncamento, richiede cast)
// Attenzione all'overflow!
int grandeNumero = 130;
byte piccolo = (byte) grandeNumero; // -126 (overflow!)
// Conversione String -> numero
String votoStringa = "8";
int voto = Integer.parseInt(votoStringa);
double mediaDouble = Double.parseDouble("7.5");
// Conversione numero -> String
String risultato = String.valueOf(voto);
String altro = Integer.toString(voto);
String concatenato = "" + voto; // meno efficiente
完全な例: レポートカードの計算
package it.scuola.registro;
public class CalcoloPagella {
public static void main(String[] args) {
// Dati studente
final String NOME_STUDENTE = "Mario Rossi";
final String CLASSE = "3A";
// Voti per materia
int italiano = 7;
int matematica = 8;
int storia = 6;
int inglese = 9;
int scienze = 7;
// Array dei voti
int[] voti = {italiano, matematica, storia, inglese, scienze};
String[] materie = {"Italiano", "Matematica", "Storia", "Inglese", "Scienze"};
// Calcolo statistiche
int somma = 0;
int votoMax = voti[0];
int votoMin = voti[0];
int countSufficienti = 0;
for (int voto : voti) {
somma += voto;
if (voto > votoMax) votoMax = voto;
if (voto < votoMin) votoMin = voto;
if (voto >= 6) countSufficienti++;
}
double media = (double) somma / voti.length;
// Stampa pagella
System.out.println("╔════════════════════════════════════╗");
System.out.println("║ PAGELLA SCOLASTICA ║");
System.out.println("╠════════════════════════════════════╣");
System.out.printf("║ Studente: %-24s ║%n", NOME_STUDENTE);
System.out.printf("║ Classe: %-24s ║%n", CLASSE);
System.out.println("╠════════════════════════════════════╣");
for (int i = 0; i < materie.length; i++) {
String giudizio = switch (voti[i]) {
case 10, 9 -> "Eccellente";
case 8 -> "Buono";
case 7 -> "Discreto";
case 6 -> "Sufficiente";
default -> "Insufficiente";
};
System.out.printf("║ %-12s: %2d (%s)%n", materie[i], voti[i], giudizio);
}
System.out.println("╠════════════════════════════════════╣");
System.out.printf("║ Media: %.2f ║%n", media);
System.out.printf("║ Voto max: %d ║%n", votoMax);
System.out.printf("║ Voto min: %d ║%n", votoMin);
System.out.println("╠════════════════════════════════════╣");
// Esito finale
String esito;
if (countSufficienti == voti.length && media >= 6) {
esito = "PROMOSSO";
} else if (countSufficienti >= voti.length - 1) {
esito = "SOSPESO";
} else {
esito = "NON PROMOSSO";
}
System.out.printf("║ ESITO: %-27s ║%n", esito);
System.out.println("╚════════════════════════════════════╝");
}
}
結論
この記事では、Java のプリミティブ データ型と変数について説明しました。 定数、演算子、フロー制御構造。
Nel 次の記事 をさらに深く掘り下げていきます メソッド そして 基本的なデータ構造: 再利用可能な関数を定義する方法 そして配列を操作します。
覚えておくべき重要なポイント
- 8 つのプリミティブ型: byte、short、int、long、float、double、char、boolean
- ファイナル: 変数を定数にします
- 範囲: 変数はそのブロック内でのみ表示されます
- スイッチ式: Java 14 以降は矢印構文をサポートします
- それぞれ: インデックスが必要ない場合に推奨
- 鋳造: コンバージョンを絞り込む場合に必要







