Je pensais juste que je prenais un bain. Dans le langage Java, les littéraux sont les valeurs de type primitif, de type String et de type nul exprimées directement dans le code. Les types primitifs ont des caractéristiques différentes des types de référence, "c'est pourquoi cela ne peut pas être aidé" (bien que vous ne devriez pas le dire), et les types nuls sont également "nuls", vous pouvez donc directement décrire et gérer ces données. Je peux être d’accord avec vous. Alors pourquoi y a-t-il un littéral uniquement pour String dans le type de référence? Pourquoi? Pourquoi est-ce sensuellement? J'ai pensé. Très bien, découvrons.
C'est le début de toutes les erreurs, mais puisqu'il s'agit d'une chaîne «littérale» (signifiant «littéralement»), c'est la chaîne elle-même. Mais "vide". Pas nul, mais "vide". "Sky" est un concept assez important, n'est-ce pas? Je ne pense pas qu'il soit écrit que vous puissiez comprendre pourquoi le littéral de chaîne a été préparé même si vous allez voir la classe String. Mais sans aucune réflexion, j'ai appuyé vaguement sur la touche F3 et suis allé voir la classe String. Bonjour. Une heure de mon mystère. La première chose qui saute
String.class
private final char value[];
Champ. Il s'agit d'un tableau invariant de valeurs char qui stocke des données de chaîne de type String. Puisque la séquence et le flux sont importants, cela s'appelle une séquence. J'ai appris au début que de nouvelles données seront générées lorsqu'elles seront nouvelles. C'est pourquoi vous pouvez utiliser StringBuilder pour les chaînes modifiables.
En regardant le début du grand nombre de constructeurs, cela ressemblait à "Ouais", et j'ai été surpris même maintenant.
String.class
public String() {
this.value = "".value;
}
public String(String original) {
this.value = original.value;
this.hash = original.hash;
}
//Omis ci-dessous
Que se passe-t-il avec this.value =" ". Value;
? est.
Je vois qu'il est initialisé avec String str =" ";
parce que c'est une chaîne de caractères vide, et je l'ai appris il y a longtemps et je l'utilise aussi, mais quand j'y pense, je pense que char c = '';
est impossible. .. N'est-il pas possible de créer une instance mais de ne pas attribuer de valeur initiale? ?? ??
Sample.java
String str = "";
System.out.println(str.length()); // 0
System.out.println(str.charAt(0)); // Exception!
Si vous y réfléchissez, la valeur initiale n'est pas incluse. Je peux le générer, mais il n'y a aucune valeur. J'ai rêvé qu'il contenait des données appelées une chaîne de caractères vide. Ce n'était pas le cas. Non, il y a un caractère qui n'est pas le caractère "vide", mais ce n'est pas un caractère même si la zone mémoire est sécurisée. Puisque les données sous forme de caractères sont "vides", la zone de mémoire est sécurisée même si la longueur de la chaîne de caractères est égale à 0. Il y a, mais il n'y a pas de concept de «vide». C'est profond. String.charAt () vient de cesser de chuchoter StringIndexOutOfBoundsException. Très bien, relancez le défi.
Sample.java
String str = "I love you.";
System.out.println(str.length()); // 11
str = "I love you." + "";
System.out.println(str.length()); // 11
Ouais, la longueur de la chaîne ne change pas. Bien sûr. Parce que c'est "vide".
Je suis soudainement revenu à moi-même ici. Par exemple, Point p = new Point ();
peut être défini avec une valeur initiale de 0 pour x et y car ce n'est pas une séquence.
La classe String implémente CharSequence, tout comme StringBuilder et StringBuffer. Donc, s'ils créent une instance sans rien donner à l'argument, seule la zone où placer les données est sécurisée, et c'est la caractéristique du tableau lui-même. C'est un peu différent de String, mais je ne savais pas pourquoi je ne pouvais pas simplement le générer. J'écris ceci dans l'agonie. La collection est également différente d'un tableau, mais d'abord une instance du framework lui-même telle que List est créée et les données sont entrées plus tard. Même s'il s'agissait d'une chaîne de caractères vide, je ne me sentais pas détendu que la chaîne de caractères serait une chaîne de caractères (certaines données importantes). Pourquoi l'as-tu oublié? La fondation de la fondation est importante, n'est-ce pas? J'étais parfaitement conscient. En même temps, j'ai ressenti la plus grande déception pour moi-même en ce siècle.
Je pense que l'initialisation consiste à attribuer une valeur avec une déclaration. Même si les données d'une chaîne de caractères claire ne peuvent pas être affectées, les informations d'une instance de String sont générées et complétées, donc je pense que l'initialisation est une initialisation, mais grâce au merveilleux concept de "vide" Je pense qu'il contient une certaine complexité d'initialisation que d'autres instances n'ont pas. Eh bien, comme une chaîne de caractères vide est le littéral d'une chaîne de caractères, il peut être significatif d'avoir des informations indiquant qu'il s'agit d'un type de chaîne de caractères (type String), mais j'ai été convaincu par le passé. Une des implications de l'attribution d'une chaîne vide pour "réduire le risque d'une exception due à null" (que je savais) n'est pas tout à fait maintenant. Est-ce parce que facultatif est maintenant disponible? Cependant, l'utilisation est étrange, comme facultative pour initialiser une instance à l'aide d'une chaîne littérale. Je pense que Optional peut être utilisé correctement lorsque la valeur de retour d'une méthode est censée être nulle. Je ne suis pas reconnaissant pour un tel endroit. Au contraire, c'est juste ennuyeux. Si vous utilisez Eclipse, vous vous fâcherez comme un démon si vous essayez d'utiliser une variable avant qu'elle ne soit initialisée, et il semble inutile de l'initialiser avec une chaîne de caractères nulle ou vide. Je remplace une chaîne de caractères vide avec le sentiment qu'il est désagréable de simplement déclarer et de ne plus entrer de valeur. null peut être initialisé, mais il est nul (rien, pas de référence), donc cela ressemble à une merde. C'est mauvais.
@hiuchida a commenté que le plaisir de ne pas séparer null et non nul est merveilleux. Je publierai l'exemple tel quel.
String empty = "";
for (char ch : empty.toCharArray()) {
Certes, il est fatiguant de toujours être conscient de null ou non-null. Comme vous l'avez dit, le point de vue que vous pouvez vous amuser est également merveilleux.
C'était gudaguda, mais je vais le laisser tel quel comme commandement de ne pas être repris par le même "pourquoi?" Ensuite, nous nous sommes lancés dans un voyage pour trouver une manière saine d'utiliser des cordes vides.