加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 如果字符串对象被实习,那么为什么改变一个不会影响其他

发布时间:2020-12-15 05:21:39 所属栏目:Java 来源:网络整理
导读:参见英文答案 What is the difference between a variable,object,and reference? ????????????????????????????????????5个 如果字符串对象被中断,那么为什么改变一个不会影响其他对象 public class EqualExample {public static void main(String[] args)
参见英文答案 > What is the difference between a variable,object,and reference? ????????????????????????????????????5个
如果字符串对象被中断,那么为什么改变一个不会影响其他对象

public class EqualExample {
public static void main(String[] args) {

    String str = new String("Hello");
    String str1 = new String("Hello");

    System.out.println(str == str1);
    System.out.println(str1.equals(str));

}

}

上述程序的输出将是


真正

public class EqualExample {
    public static void main(String[] args) {

    String str = "Hello";
    String str1 = "Hello";

    System.out.println(str == str1);
    System.out.println(str1.equals(str));

}

}

上面代码的输出是

真正
真正

这是因为在字符串池中Heloo alredy存在所以它实际上是字符串并引用相同的对象然后为什么如果我将str1更改为“heloo java”然后为什么str仍然具有值“heloo”.因为它们引用相同的对象所以str的值必须改变
????公共类EqualExample {
????????public static void main(String [] args){

String str = "Hello";
    String str1 = "Hello";

    System.out.println(str == str1);
    System.out.println(str1.equals(str));

    str1="Heloo java";
    System.out.println(str+str1);
    System.out.println(str == str1);
    System.out.println(str1.equals(str));

}

}

输出为真
真正
HelooHeloo java

解决方法

str1不是String.它是对String对象的引用.通过做

str1 = "Heloo java";

你没有修改String对象,你只是将引用指向另一个不同的String对象.

之前:

str --------> "Hello"
                ^
str1 -----------|

后:

str --------> "Hello"

str1 -------> "Heloo Java"

改变对象将包括做类似的事情

str1.setCharacters("Heloo Java");

但是这样的方法不存在,因为字符串是不可变的.因此,他们的角色无法修改(除非使用脏反射技巧).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读