红星照我去盗墓 发表于 2021-9-12 22:09

关于历次重开Java学习的记录0x01

Java教程看过好几遍,记住的东西没有多少.
以记录的方式,记录一下本次学习过程有收获的地方.

0x01 可变参数
用 类型... 定义,可变参数相当于数组类型.

class Group{
        private String[] names;
       
        public void setNames(String names) {
        this.names = names;
        }
}
上面的setNames()就定义了一个可变参数.调用时,可以怎么写:
Group g = new Group();
g.setNames("xiaoming","xiaohong","xiaojun");
g.setNames("xiaoming","xiaohong");
g.setNames("xiaoming");

完全可以把可变参数改写成String[]类型:

class Group{
        private String[] names;
       
        public void setNames(String[] names){
        this.names = names;
       
        }
}
0x02 参数绑定
调用方把参数传递给实例方法时,调用时传递的值会按参数的位置一一绑定.

基本类型的参数绑定.
基本类型的参数就相当于C++中的值传递,只是复制参数值.
双方各自的后续修改,互不影响.

引用类型的参数传递类似于C++中的饮用传递,更改外面的值,里面的值会跟着改.
在C程序中,需要交换两个参数的值时,一般采用引用传递.

public class main{
        public static void main(String[] args){
        Person p = new Person();
        String bob = "Bob";
        p.setName(bob);
        System.out.println(p.getName));
        bob = "Alice";// bob还是Alice
        System.out.println(p.getName());
        }
}

class Person{
        private String name;
       
        public String getName(){
        return this.name;
        }
       
        public void setName(String name){
                this.name = name;
                }
}

基本类型传递和引用类型传递无非就是基于变量的区别;

基本类型传递只是值的复制,没有地址的事情.
而引用类型的传递是根据地址的变化传递的;
上面的例子中,两次打印都是bob.
更改bob后,其指向发生变化.
但是传入的参数并没有更新;
如果再次传入;
就会改变其指向的值.

萋小磊 发表于 2021-9-13 03:09

Java, Go, Js, C# 都是值传递没有引用传递
这里区别无非是传递的值内容是什么

红星照我去盗墓 发表于 2021-9-13 21:30

萋小磊 发表于 2021-9-13 03:09
Java, Go, Js, C# 都是值传递没有引用传递
这里区别无非是传递的值内容是什么

那意思就是传递的是地址还是真实的值吗
{:1_908:}
页: [1]
查看完整版本: 关于历次重开Java学习的记录0x01