仰望天花板 2021-03-14 20:59 采纳率: 54.5%
浏览 43
已结题

静态方法的修改值操作截至以及没有成功是什么原因?

 

public static void main(String[] args) {
 String str="hello";
    Point p=new Point(1,2);
    Point[] arr2 = {new Point(1,2),new Point(3,4),new Point(5,6),p};
    say(p,arr2,str);
    System.out.println(str);
    System.out.println("p:"+p);//6,6
    System.out.println("arr2:"+Arrays.toString(arr2));//

}
public static void say(Point p, Point[] arr2,String str){
        str = "world";
        p.setX(4);
        p = arr2[2];
        p.setX(6);
        arr2 = Arrays.copyOf(arr2, arr2.length-1);
        arr2[2].setX(8);
        arr2 = new Point[]{new Point(2,2),p};
        arr2[arr2.length-1].setX(12);
    }
}

例如下图,静态方法中p.setX(4);将p的x改为四就赋值成功,但是p = arr2[2]和p.setX(6);就没有赋值给p,所以这种赋值操作什么时候成功,什么时候不成功,什么时候截至,原因是什么?另外str的值为什么也没改变?

2.数组缩容以后,arr2[2].setX(8);将数组中的第三个元素x改为8,也就是最后一个,之后数组重新new了一个对象,又传了一个p,这样数组里应该有五个元素了,但是输出结果只有四个,之后将数组的最后一个元素的x改为12,但是输出结果只有四个元素,而且值还是4,2;第三个元素的x值为什么是12?

 

 

 

  • 写回答

3条回答 默认 最新

  • qq_34370249 2021-03-15 09:34
    关注

    看一下java的值传递和引用传递

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 7月25日
  • 已采纳回答 7月17日

悬赏问题

  • ¥15 安卓C读取/dev/fastpipe屏幕像素数据
  • ¥15 pyqt5tools安装失败
  • ¥15 mmdetection
  • ¥15 nginx代理报502的错误
  • ¥100 当AWR1843发送完设置的固定帧后,如何使其再发送第一次的帧
  • ¥15 图示五个参数的模型校正是用什么方法做出来的。如何建立其他模型
  • ¥100 描述一下元器件的基本功能,pcba板的基本原理
  • ¥15 STM32无法向设备写入固件
  • ¥15 使用ESP8266连接阿里云出现问题
  • ¥15 BP神经网络控制倒立摆