方法中的局部变量基本类型为什么不能被方法中的方法修改

为什么a和b没有赋值,但是cat的name可以进行赋值???


package com.cctv.TaskScheduler;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import java.util.Map;

/**
 * @author 莉莉
 * @create 2020/7/29
 * @since 1.0.0
 */
public class Main {
    public static void main(String[] args) {
      //  AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(TaskSchedulerConfig.class);
        cat cat = new cat();
        doSet(cat);
        System.out.println(cat.getName());

        String a = null;
        doSetName(a);
        System.out.println(a);

        Integer b = null;
        doSetAge(b);
        System.out.println(b);

    }
    private static void doSet(cat a){
        a.name = "dfasdfasdf";
    }
    private static void doSetName(String a){
        a = "dfasdfasdf";
    }
    private static void doSetAge(Integer a){
        a = 0;
    }

    static class cat{
        String name;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }
}

基本类型在Java中是按值传递的,而不是按引用传递的。当你将一个基本类型作为参数传递给方法时,方法会在栈中创建一个新的变量,它的值与原始变量的值相同。当你在方法中更改这个变量的值时,只是改变了这个新的变量的值,并没有改变原始变量的值。因此,在你的示例中,doSetName()和doSetAge()方法并没有改变传递给它们的参数a和b的值,因为它们只是改变了在栈中创建的新变量的值。