Quelle guide sono troppo matematicamente astruse per me... Tutti ci lamentiamo del nostro professore.. Io sono arrivato a capire che una classe contiene diversi oggetti atti ad eseguire uno o più metodi... Stop. So che quando si crea un oggetto non si crea solo il suo riferimento in memoria, ma viene memorizzato proprio l'oggetto stesso.. però proprio non riesco a capire la differenza pratica tra ad esempio int a = 100; ed int a = new int(); a=100, perchè anche se non creo l'oggetto, poi nel codice a me lo fa usare ugualmente come voglio! Quella spiegazione di 1nd33d intuisco che è buona, ma purtroppo non riesco a capirla... Vi giuro, quando mi soffermo a pensare che nonostante il mio Q.I. sia alto non capisco determinate cose mi prendo a pugni solo. So che se ad esempio ho un int (come detto sopra non so la differenza pratica tra dichiararlo e crearne l'oggetto) chiamato ad esempio numero, poi posso fare numero++, numero*numero e altro, a patto che io rimanga in valori accettabili da int, char è un solo carattere quindi non saprei cosa farci, personalmente non scriverò "char" in java nemmeno con un fucile puntato contro, ma il mio cruccio è se usando String che differisce in quanto tipo non primitivo potrò comunque fare concatenazione, stampe a schermo e altro
[P.S. ho capito solo che se ad esempio creo due oggetti uguali con nomi diversi, ovviamente la modifica di uno non influirà sull'altro; se invece creo un oggetto, e poi una variabile ad esso riferita, ma senza oggetto, alla modifica di uno verrà modificato anche l'altro.. l'essere oggetto garantisce una certa indipendenza in pratica]
Capisco.Io ho fatto il classico, al primo anno di università, appena iniziato a fare programmazione, ho passato tre mesi sentendomi un idiota senza capire cosa realmente fosse un oggetto. Però, caro amico, così mi fai incacchiare. Prima mi dici che non vuoi leggere i manuali (cosa che abbiamo fatto TUTTI) perché non capisci, poi ti dimentichi quello che ti è stato scritto due post fa. Ma soprattutto I MANUALI sono molto meglio di qualsiasi utente perché spiegano passo passo e con precisione tutto ciò che devi fare, i perché ed i percome. Sia io che indeed ti abbiamo spiegato per filo e per segno la differenza fra char e String, almeno ricordati quello che ti diciamo cavolo.
Guarda, sostanzialmente la differenza fra char e String è solo che String offre metodi ad alto livello per il trattamento delle stringhe. Cioé, un oggetto di tipo String in Java non è altro che un array di char a lunghezza variabile (vector); in più ti da la possibilità di maneggiare le stringhe con molta facilità.
Non esattamente.
Non so a che livello questo professore (non) ti abbia insegnato le basi del Java, ma in Java, come in praticamente tutti gli altri linguaggi, esistono i tipi primitivi: char, int, long, float, double... ma esistono anche le classi adibite a contenerli: Character, String, Integer, Long, Double... definite anche classi "wrapper".
Qual è la differenza tra un tipo primitivo (o un array di primitivi, come un vettore di char) e una classe wrapper?
Una variabile di tipo primitivo contiene in memoria l'effettivo valore binario dell'informazione (il codice ascii di un char, un valore binario in complemento a 2 di un int...) mentre una variabile di una classe wrapper contiene, come tutte le variabili che si riferiscono a istanze di classe, l'indirizzo in memoria dell'oggetto.
Una classe wrapper mette a disposizione molti metodi di utilità, un valore primitivo no, perchè è solo il valore in se.
Su un oggetto puoi richiamare i metodi che sono definiti nella classe di cui è istanza, su un tipo primitivo (per esempio int) no, perchè non è un oggetto, è un primitivo.
Una stringa in Java è un vettore di primitivi char wrappato in una classe String.
Comunque, andiamo con ordine.
Le variabili in Java possono essere di due tipi:
1. Tipo base del linguaggio: int, double, char,...
2. Tipo riferimento o Tipo oggetto
Le variabili del tipo 1 contengono i valori caratteristici del tipo (esempio int interi): cioé la porzione di codice
ha come effetto di salvare in una cella di memoria (stiamo semplificando eh :) ) la traduzione in binario del numero intero con segno "15". Cioé, quella
variabile contiene proprio il valore numerico "15", che verrà appunto interpretato come un numero perché la variabile è di tipo "int".
Le variabili del tipo 2 contengono riferimenti ad oggetti. Un oggetto è un aggregato complesso di informazioni. Cioé serve a racchiudere al suo interno altri oggetti
e variabili. Ogni oggetto è definito da una classe.
Le classi non sono contenitori, è un esempio del caxxo dire che sono contenitori. Sono
definizioni. In una classe definisci come è fatto un oggetto di quella classe (quindi se contiene altri oggetti o variabili) e che cosa può fare (metodi della classe).
Ricapitolando:
Una classe è, idealmente, la collezione di tutti i possibili oggetti che hanno le caratteristiche da lei definite.
Una classe è la definizione di un tipo a cui tutti gli oggetti della classe sono uniformati.
Una classe è una mera definizione.
La JVM utilizza questa definizione per creare e usare oggetti di quella classe.
Ogni oggetto della classe è diverso dagli altri oggetti della stessa classe, ma tutti hanno la stessa struttura (o tipo).
Ad esempio:
Codice:
public class Persona {
String nome;
int età;
public Persona(int e, String n){//prende come parametri l'età e il nome
this.nome=n;
this.età = e;
}
public void unMetodoQualunque(){
//Corpo del metodo omesso....
}
}
la classe Persona ci dice che nel nostro programma, delle persone, ci interessano solo il nome e l'età. Pensa a questa cosa: tutte le persone hanno un nome ed un'età, ma sono tutte persone diverse, anche se hanno lo stesso nome e la stessa età. Ecco che le classi sono diciamo il metodo più naturale di rappresentare queste informazioni: la classe Persona in questo caso specifica come è fatta una persona e che cosa può fare (unMetodoQualsiasi!!!).
Invece il codice:
Codice:
Persona p = new Persona(23, "Paperino");
Persona t = new Persona(24, "Pluto");
Sta creando due persone, una riferita dalla variabile "p" ed una riferita dalla variabile "t". Ora, prendi un manuale per principianti e leggitelo. Ciao :)