企业网站seo教程,wordpress 图片展示页面,杭州市建设工程造价管理协会网站,镇江seo网站如何理解在数据类型中元素不能修改#xff1f;
我所理解的元素修改是#xff1a; 不能对已经赋值或者初始化的数据类型进行元素的修改#xff0c;这里的修改不是指片面意思上的输错了数值#xff0c;将光标移到对应位置#xff0c;按下删除键#xff0c;再进行数据的修改…如何理解在数据类型中元素不能修改
我所理解的元素修改是 不能对已经赋值或者初始化的数据类型进行元素的修改这里的修改不是指片面意思上的输错了数值将光标移到对应位置按下删除键再进行数据的修改等操作也不是指对对象的重新赋值。
重新赋值初始化完成后又进行重新赋值 修改创建后对象后对某些元素进行添加、删除等操作
例如Python中字符串不能被改变word[‘abcdefgh’]如果运行word[0] m’会导致错误‘str’ object does not support item assignment. 关于字符串原码详细的信息可以查看https://zhuanlan.zhihu.com/p/120980114
变长可变对象 - 例如 List创建后还能添加、删除元素 变长不可变对象 - 例如 StringTuple 创建后不再支持添加、删除等操作
word abcdefgh
word[0] m
print(word)List列表可以完成大多数集合类的数据结构实现,元素类型可以不相同,列表的元素可以修改。。
a [0,1,2,3,4,5,6,7,8,9]
a[2:5] [11,11,11]
print(a) Tuple元组与列表类似但是元组的元素不能修改。
tuple (abc,123,3.14,kim)
tuple[0] loveprint(tuple) 在Java语言中菜鸟教程中解析了String类不可改变的实例。简单来说String类利用了final修饰的char类型数组存储字符。字符串的本质是字符数组value属性用来存放字符串中的字符final属性修饰是不可被修改的。 以下内容来源https://www.cnblogs.com/Java-JJ/p/12625888.html String不可变但不代表引用不可以变
String str “Hello”; str str World; System.out.println(“str” str); 结果
strHello World 解析
实际上原来String的内容是不变的只是str由原来指向Hello的内存地址转为指向Hello World的内存地址而已也就是说多开辟了一块内存区域给Hello World字符串。 通过反射是可以修改所谓的“不可变”对象 // 创建字符串Hello World 并赋给引用s String s “Hello World”;
System.out.println(s s); // Hello World
// 获取String类中的value字段 Field valueFieldOfString String.class.getDeclaredField(“value”);
// 改变value属性的访问权限 valueFieldOfString.setAccessible(true);
// 获取s对象上的value属性的值 char[] value (char[]) valueFieldOfString.get(s);
// 改变value所引用的数组中的第5个字符 value[5] ‘_’;
System.out.println(s s); // Hello_World 结果
s Hello World s Hello_World 解析
用反射可以访问私有成员 然后反射出String对象中的value属性 进而改变通过获得的value引用改变数组的结构。但是一般我们不会这么做这里只是简单提一下有这个东西。
是否可以继承 String 类 String 类是 final 类不可以被继承。
重新赋值的“背后”
对于String类对象重新赋值
执行代码
public class Text01 {public static void main(String[] args) {String s Google;System.out.println(s s);s Runobb;System.out.println(s s);}
}得到的结果
s Google
s Runobb两次输出字符串string的结果看似是改变了但是第一次赋值的“Google”还存放在内存中。
原因在于实例中的 s 只是一个 String 对象的引用并不是对象本身当执行 s “Runoob”; 创建了一个新的对象 “Runoob”而原来的 “Google” 还存在于内存中。
Java虚拟机中栈(stack)中分配的是基本数据类型和自定义对象的引用。堆(heap)中分配的是对象创建new的对象。方法区中存放的是类的信息、static变量、常量。当执行 s Runoob时对象 s 指向栈中新的引用“Runoob”。所以s的结果看似改变实则是和栈中另外的值手牵手了而旧相好Google还在栈中原来的地方静静等待着。所以说String对象是不可变的Google还在原来的地方没有任何改变。 以上是自己在学习过程中对于数据类型的元素是否可以被修改的理解如果哪里有错误还请提醒一下。