1. La différence entre & et &&
(étude recommandée : questions d'entretien Java )
& l'opérateur a deux utilisations :
(1) ET au niveau du bit
(2) ET logique ;
L'opérateur && est une opération ET (ou ET) de court-circuit. La différence entre le ET logique et le ET en court-circuit est très énorme. Bien que les deux exigent que les valeurs booléennes des côtés gauche et droit de l'opérateur soient vraies, la valeur de l'expression entière est vraie.
&& est appelé opération de court-circuit car si la valeur de l'expression à gauche de && est fausse, l'expression de droite sera directement court-circuitée et aucune opération ne sera effectuée. Plusieurs fois, nous devrons peut-être utiliser && au lieu de &.
Par exemple, lors de la vérification de la connexion de l'utilisateur, il est déterminé que le nom d'utilisateur n'est pas nul ni une chaîne vide. Il doit être écrit comme username != null &&!username.equals(""). des deux ne peut pas être échangé, et encore moins utilisé. L'opérateur &, car si la première condition n'est pas vraie, la comparaison égale des chaînes ne peut pas être effectuée du tout, sinon une exception NullPointerException sera générée.
2. Lorsque vous utilisez le mot-clé final pour modifier une variable, la référence ne peut-elle pas être modifiée ou l'objet référencé ne peut-il pas être modifié ?
Lors de l'utilisation du mot-clé final pour modifier une variable, cela signifie que la variable de référence ne peut pas être modifiée, mais que le contenu de l'objet pointé par la variable de référence peut toujours être modifié.
Exemple :
public class Test10 { // final修饰基本类型的变量 public static final char CHAR = '中'; // final修饰引用类型的变量 public static final StringBuffer a = new StringBuffer("StringBuffer"); public static void main(String[] args) { // 编译报错,引用不能变 // a = new StringBuffer("hehe"); // 引用变量所指向的对象中的内容还是可以改变的 a.append("xxx"); } public static int method1(final int i) { // i = i + 1;// 编译报错,因为final修饰的是基本类型的变量 return i; } // 有人在定义方法的参数(引用变量)时,可能想采用如下的形式来阻止方法内部修改传进来的参数对象, // 实际上,这是办不到的,在该方法内部任然可以增加如下代码来修改参数对象 public static void method2(final StringBuffer buffer) { buffer.append("buffer");// 编译通过,因为final修饰的是引用类型的变量 } }
3. Quelle est la différence entre les variables statiques et les variables d'instance ?
Différence de syntaxe : les variables statiques doivent être modifiées avec le mot-clé static, mais pas les variables d'instance.
La différence lorsque le programme est en cours d'exécution : les variables statiques sont subordonnées aux classes et les variables d'instance sont subordonnées aux objets.
Les variables d'instance doivent créer un objet d'instance, et les variables d'instance qu'il contient se verront attribuer un espace avant que cette variable d'instance puisse être utilisée.
Les variables statiques sont des quantités de classe, tant que le programme se charge ; les octets du code de classe, la variable statique se verra allouer de l'espace et pourra être utilisée.
En résumé, les variables d'instance doivent être utilisées après la création d'un objet, et les variables statiques peuvent être référencées directement en utilisant le nom de la classe.
Remarque : l'utilisation de variables statiques (statiques) présente également des limites. Les méthodes non statiques et les variables de la classe ne peuvent pas être appelées dans une méthode statique. Il n'y a qu'une seule variable dans la mémoire après le chargement de la classe. . Un espace mémoire qui peut être partagé par tous les objets d'instance d'une classe.
4. Est-il possible d'émettre un appel à une méthode non statique à partir d'une méthode statique ?
Non.
Étant donné que les méthodes non statiques sont associées à des objets, un objet doit être créé avant que les appels de méthode puissent être effectués sur l'objet. Lors de l'appel de méthodes statiques, il n'est pas nécessaire de créer un objet et peut être appelé directement.
C'est-à-dire que lorsqu'une méthode statique est appelée, aucun objet instance ne peut avoir été créé. Si un appel à une méthode non statique est émis à partir d'une méthode statique, quel objet est la méthode non statique. associé à ? Cette logique ne peut pas être établie, donc une méthode statique émet en interne un appel à une méthode non statique.
5. Quelle est la différence entre la méthode "==" et égal ? L'opérateur
== est spécifiquement utilisé pour comparer si les valeurs de deux variables sont les mêmes, c'est-à-dire pour comparer si les valeurs stockées dans la mémoire correspondant aux variables sont les même. Si vous souhaitez comparer deux types de données de base ou deux variables de référence pour vérifier leur égalité, vous ne pouvez utiliser que l'opérateur ==.
La méthode égale est utilisée pour comparer si le contenu de deux objets indépendants est le même, tout comme comparer si deux livres sont identiques. Les deux objets qu'elle compare sont indépendants.
Exemple de code :
String a = new String("AA"); String b = new String("AA"); System.out.println(a==b); System.out.println(a.equals(b));
Deux nouvelles instructions créent deux objets, puis utilisent deux variables a et b pour pointer respectivement vers l'un des objets. Ce sont deux objets différents. of sont différents, c'est-à-dire que les valeurs stockées dans a et b sont différentes, donc l'expression a==b renverra false. Le contenu des deux objets est le même, donc a,equals(b) renvoie vrai.
Remarque : les comparaisons de chaînes utilisent essentiellement la méthode égale.
Si une classe n'a pas sa propre méthode égale définie, alors elle héritera de la méthode égale de la classe Object. Le code d'implémentation de la classe Object est le suivant :
boolean equals(Object o) { return this==o; }
Cela montre. que si une classe n'a pas sa propre méthode égale définie, la méthode égale, sa méthode égale par défaut, équivaut à utiliser l'opérateur ==, c'est-à-dire comparer les objets pointés par deux variables au même objet. À ce stade, l’utilisation de equals et == obtiendra le même résultat. Si vous souhaitez écrire une classe capable de comparer si le contenu de deux objets d'instance est identique, vous devez remplacer la méthode equals.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!