‘!~淼 2020-10-11 14:27 采纳率: 0%
浏览 33

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

为什么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;
        }
    }
}
  • 写回答

1条回答 默认 最新

  • 小唐不会敲代码 2023-03-22 13:34
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥50 这Mac系统提示虚拟内存不足,怎么解决
  • ¥15 Rs232电路无法收发数据,求帮助
  • ¥15 百度cookie扫码登录器
  • ¥15 微机原理汇编语言debug调试实验
  • ¥23 matlab可以把相图转换为庞加莱映射吗
  • ¥15 Arduino电机和openmv连接异常
  • ¥15 Arcgis河网分级报错
  • ¥200 java+appium2.1+idea
  • ¥20 请帮我做一个EXE的去重TXT文本
  • ¥15 工价表引用工艺路线,应如何制作py和xml文件