java基础技术知识点总结——字符串、循环、方法参数

xiaoxiao2021-02-28  70

字符串:

String类是final的,意味着这个类不可继承,并且无法修改一个字符串的字符和大小。 进行字符串操作时,例如String s = “hello”; s +=”world”;实际上s指向的字符串常量地址已被修改。

StringBulider和StringBuffer有什么区别: StringBufferd支持并发操作,线性安全的,适合多线程中使用。 StringBuilder不支持并发操作,线性不安全的,不适合多线程中使用。 线性安全–>速度慢。 速度快–>线性不安全。

循环:

for each循环中,可以用来依次处理数组或者集合中的元素,其中集合表达式必须是实现了Iterable接口的类对象,例如ArrayList。

方法参数:

在Java中,一个对象变量并没有实际上包含一个对象,而是保存了引用这个对象的地址值。 因为Java是按值传递,例如: 基本类型: int a = 1; exchange(a); public static void exchange(int b){//将a的值传递给b,此时b为1 b = b * 3;//此时b为3 } System.out.println(a);//但是a的值不受影响,还是为1。 而对象引用: class Person{ String name; double salary; public Person(String name,double salary){ this.name = name; this.salary = salary; } } public static void tripleSalary(Person x){ x.salary = x.salary * 3;//设置3倍薪水 } public static void exchange(Person a,Person b){ Person c = a; a = b; b = c; } public static void main(String[] args){ Person p = new Person("A",5000); tripleSalary(p);//此时A的薪水变成15000。 Person p1 = new Person("p1",2000); Person p2 = new Person("p2",4000); exchange(p1,p2);//方法调用后,p1仍旧是p1,并不会指向p2。 } 因为在tripleSalary(p)这个调用方法中,将p的值传递给了x,此时p的值(也就是引用对象的地址)和x指向了相同的一个地址,而在方法中,x针对salary这个字段进行了重新赋值,p的salary属性也随之进行了修改(因为指向了同一个对象)。 在exchange(p1,p2)调用过程中,将p1的值传递给a,将p2的值传递给b,然后a和b的值进行了互换,但是p1和p2的值却不会有任何改变,因为a和b只是交换了各自引用的对象地址,与p1和p2无关。
转载请注明原文地址: https://www.6miu.com/read-57181.html

最新回复(0)