2017-09-04 1 views
-2

J'ai la variable globale suivante de type String.Variable globale de type chaîne

static public String rev="hello" 

Je peux le lire sans aucun problème d'un objet d'une autre classe. Y at-il de toute façon je peux le mettre à jour avec une autre chaîne d'un objet d'une autre classe? Je sais que la chaîne Java est immuable. J'ai essayé avec la manière suivante à l'aide StringBuilder:

static public StringBuilder rev=new StringBuilder("hello"); 
    static public void setRev(StringBuilder s) 
    { 
    rev=rev.delete(0,rev.length()); 
    rev.append(s); 
    } 

d'une autre classe:

MainActivity.setRev(stringBuilderVar); 

Mais cela n'a pas fonctionné.

+1

Java Les valeurs de chaîne sont immuables. StringBuilders ne le sont pas. –

+0

Les chaînes sont immuables, mais vous pouvez réaffecter une chaîne _variable_ à une chaîne différente. Mais vous avez déjà utilisé 'rev' (disons' someOtherVar = MainActivity.rev'), réaffecter 'rev' ne changera rien à l'endroit où vous avez précédemment copié la référence. Sans plus d'informations, il est difficile de dire quelle est la bonne façon de faire les choses. Mais je suis assez sûr que StringBuilder n'est pas la bonne solution. – ajb

+0

Déclarer que StringBuilder est statique peut être la cause de l'immuabilité? La raison pour laquelle je déclare statique est que je suis l'accès d'une autre classe. –

Répondre

1

La syntaxe de mise à jour d'un champ est la même pour les champs statiques et non statiques. Utilisez simplement une instruction d'affectation:

class Global { 
    public static String greeting; 
} 

public class Other { 
    public static void main(String[] args) { 
     String newGreeting = "hello"; 
     Global.greeting = newGreeting; 
    } 
} 

Cela dit, une fois que vos programmes seront plus grands, vous voudrez probablement utiliser des champs non statiques à la place.

+0

Ce qui suit ne fonctionne pas: Global.greeting = anotherStringVar; –