gpt4 book ai didi

java - Java构造函数中的最终参数

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:51:57 24 4
gpt4 key购买 nike

我正在学习 Java 中的类和构造函数。我弄乱了示例程序中的代码,似乎无法弄清楚到底发生了什么。

这段代码不会编译,这对我来说很有意义:

class Line {
Point start;
Point end;

Line(final Point start, final Point end) {

this.start = new Point(start);
this.end = new Point(end);
start = new Point(0.4, 0.4);

}...

我试图通过调用 Point 对象的构造函数将原始起始 Point 对象引用分配给另一个 Point 对象。 final 关键字与此冲突。

但是,当我从 Point start 参数中删除 final 关键字时...

class Line {
Point start;
Point end;

Line(Point start, final Point end) {

this.start = new Point(start);
this.end = new Point(end);
start = new Point(0.4, 0.4);

}

它似乎并没有真正改变引用,传递给 Line 构造函数的 Point 对象似乎仍然指向原始对象,并且没有被 Line 构造函数的代码更改。那么给出了什么?这与所引用的“开始”在 Line 构造函数的范围内是局部的这一事实有关吗?

最佳答案

Java 不使用引用传递,它总是使用值传递。实际上,Java 中的引用类型只是指针,与 C# 中的引用根本不具有相同的含义。

因此,当您在构造函数中执行此语句时:

start = new Point(0.4, 0.4);

传入参数的原始 Point 未更改。但是,局部变量(即参数)将指向坐标定义的新 Point:0,4, 0,4

为了更好地理解,请阅读这篇文章:Java is Pass-by-Value, Dammit!

关于java - Java构造函数中的最终参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13445740/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com