String,StringBuffer,StringBuilder

1、String属于不可变类型,它创建的对象内容是不可以改变的,如果必须改变String str 的内容,就必须重新创建对象,开辟一块新的空间存储变量,同时Stirng因为被被final修饰,属于最终类,不可以被继承。

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {}

2、String[] strs = new String[5]; 表示在栈中创建一个连续的空间存储String的地址,每一次修改掉数组中的值,就相当于重新创建新的地址,将新的值放在新的地址空间内,然后将新的地址传给栈中的修改的那个数组的某个值。

在这里插入图片描述3、for(String str : strs)中,将数组中的每一个字符串的地址赋予str,当时字符串属于不可变类型,所以改变str后,str的指针改变,但是不能影响strs,所以不能修改掉strs中的值。

3.1、不修改str信息,地址都一样,

        String[] arr = new String[]{"aeag","bfega","cfegad","dgeagr","efegad"};
        int i = 0;
        for (String s : arr) {
//            s = "12";
            System.out.println(s.hashCode() + "  " + arr[i].hashCode());
            i++;
        }

在这里插入图片描述
3.2、修改str中的信息,所以相当于改变str的地址,不影响数组的地址。

 String[] arr = new String[]{"aeag","bfega","cfegad","dgeagr","efegad"};
        int i = 0;
        for (String s : arr) {
            s = "12";
            System.out.println(s.hashCode() + "  " + arr[i].hashCode());
            i++;
        }

在这里插入图片描述
4、StringBuffer和 StringBuilder多可以在不改变原先创建的对象的地址的情况下,修改其内容,但是两者之间有一定的区别:
  4.1、StringBuffer更加的安全,它利用了缓冲机制,可以在多线程的情况下,能保证数据的正确传输。因为synchronize关键字保证了该方法的安全性。
  4.2、StrignBuilder性能更好,但是它没有利用缓冲机制,在多线程下,数据可能会发生错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值