Это потому, что вы не вызываете «глобальную» переменную str
, а вместо этого вызываете локальную переменную класса str
.
Без дополнительной информации о том, какую переменную str
вы хотите изменить, Java будет использовать самую узкую переменную с заданным именем. Точно так же, как вы сделали с this.str
в конструкторе, чтобы указать, что вам нужна закрытая переменная экземпляра класса SomeClass
, вам нужно будет сделать Globals.str
, чтобы указать, что вы хотите переменную public static str
, которую вы используете в качестве глобальной .
Кроме того, как уже отмечали другие, String
являются неизменяемыми в Java, поэтому то, что вы действительно делаете, когда назначаете любую переменную типа String
, это изменяет String
, на которую ссылается переменная.