Types primitifs Java, types de référence, immuable, mutable

Comprendre les types primitifs Java, les types de référence, immuable et mutable ensemble

J'étudie Java Silver, mais j'étais confus parce que ce domaine était séparé, alors j'ai essayé de résumer ma propre compréhension.

Type primitif

Type Value Bit
boolean Valeur booléenne 1
byte entier 8
short entier 16
char lettre 16
int entier 32
float Point flottant 32
long entier 64
double Point flottant 64

Type de référence

Cela inclut principalement les classes, les chaînes et les StringBuilders.

Let's try Vérifions-le réellement.

Main.java


class Codechef
{
	public static void main (String[] args) throws java.lang.Exception
	{
		StringBuilder sb = new StringBuilder("apple");
		sample(sb);
		System.out.println(sb); // "apple orange"
		
		StringBuilder ssb = new StringBuilder("apple");
		sample5(ssb);
		System.out.println(ssb); // "apple"
		
		String s = "apple";
		String t = sample2(s);
		System.out.println(s); // "apple"
		System.out.println(t); // "apple orange"
		
		int i = 1;
		sample3(i);
		System.out.println(i); //1

		
	}	
		public static StringBuilder sample(StringBuilder sb) {
		    return sb.append(" orange");
		}
		
		public static String sample2(String s) {
		    return s+" orange";
		}
		
		public static int sample3(int i) {
		    return i+10;
		}
	    
	    public static StringBuilder sample5(StringBuilder sb) {
	        return new StringBuilder(sb+" orange");
	    }
}

Immutable vs Mutable Ce que je voudrais confirmer ici, c'est la différence entre Immutable String et Mutable StringBuilder même avec le même type de référence.

Dans le code ci-dessous, "apple orange" est inclus pour sb, ce qui signifie que le StringBuilder passé dans l'argument est passé comme référence, pas la valeur "apple", mais l'adresse de sb. La valeur de sb elle-même a changé.

        StringBuilder sb = new StringBuilder("apple");
        sample(sb);
        System.out.println(sb); // "apple orange"

    public static String sample2(String s) {
            return s+" orange";
        }

D'un autre côté, String est également un type de référence, mais la valeur de String passée à l'argument n'a pas changé. Pourquoi. En effet, StringBuilder est mutable et String est immuable. Pour String, la valeur une fois affectée à l'initialisation ne peut pas être modifiée par la suite, donc si vous essayez de modifier la valeur d'origine de String avec + etc., une nouvelle instance est renvoyée en interne et la destination de référence affectée en premier La valeur de ne change pas. Si vous souhaitez utiliser la valeur modifiée, vous n'avez pas d'autre choix que de créer une nouvelle variable String et de lui affecter comme indiqué ci-dessous.

        String s = "apple";
        String t = sample2(s);
        System.out.println(s); // "apple"
        System.out.println(t); // "apple orange"

        public static String sample2(String s) {
            return s+" orange";
        }

Comme je l'ai mentionné plus tôt, int est un type primitif, donc cela va sans dire. Comme ce n'est pas l'adresse référencée qui est passée à l'argument, mais la valeur réelle, seule la valeur est renvoyée pour la valeur passée à l'argument, donc la valeur d'origine ne change pas.

Recommended Posts

Types primitifs Java, types de référence, immuable, mutable
A propos des types primitifs et des types de référence Java
J'ai étudié les types primitifs Java
Types de données de base et types de référence (Java)
Les variables de tableau Java sont des types de référence
Types de données de base et types de référence Java
Référence de la méthode Java8
référence de la méthode java8
Matériaux de référence JAVA
Ma référence Java
À propos des types de données Java (en particulier des types primitifs) et des littéraux
objets mutables et immuables
A propos du type de données de base Java et de la mémoire du type de référence
Résumé de la spécialisation des primitives Java
[Java] Principaux types de données
Comparaison équivalente de la classe wrapper Java et du type primitif
[Java] Types de variables et types
Types de données de base Java
Générer un flux à partir d'un tableau de types primitifs en Java
À propos des types de chargeur de classe Java
Java Learning 1 (apprendre divers types de données)