初学者的一些关于Java中的equal和==以及内存操作之间的一些问题

package package2;

public class javaEqual {

    
    public static void main(String[] args) {
        String str="test";
        String str0="test";
        String str1=str;
        if(str.equals(str0)){
            System.out.println("str 和 str0 内容相同");
        }
        else{
            System.out.println("str 和 str0 内容不相同");
        }
        
        if(str==str0){
            System.out.println("str 和 str0 地址相同");
        }
        else{
            System.out.println("str 和 str0 地址不相同");
        }
        
        str="0xffff";
        
        if(str==str1){
            System.out.println("str && str1 地址相同 ");
        }

    }

}

//str为什么和str0的地址相同?他们都只是内容是相同的?
//str1的内容是str赋予的,所以在不做任何变动的情况下str与str1的内容,地址都是一样的;
//但是如果我想将改动成,如果str的内容改变,str1的内容也会跟着改变。这种情况应该如何实现?
//在java中如果没有指针,将是如何操作内存的地址的?

慕斯卡2612611
浏览 1677回答 1
1回答

Caballarii

以双引号形式初始化的String,是放在常量池里的,比如你这里的"test",当str0初始化时,常量池里已经有"test",就不会再创建一个,所以str和str0指向的是同一地址。java的String类型是final的,所以str改变str1也跟着改变请使用StringBuilder等等其他非final类型的类用了java就不要考虑操作内存地址了
打开App,查看更多内容
随时随地看视频慕课网APP