相关疑难解决方法(0)

"通过引用传递"究竟是什么意思?

谁有权决定?

编辑:显然我没有成功地完善我的问题.
不是在问Java的论证是如何传递的.我知道看起来像持有对象的变量实际上是一个包含对象引用的变量,并且该引用是按值传递的.这里有很多很好的解释(在链接的线程和其他线程中)和其他地方.

问题是关于术语传递的技术含义.(结束编辑)

我不确定这是否是SO的正确问题,如果没有道歉,但我不知道更好的地方.在这里的其他问题中已经说了很多,例如Java是"传递参考"还是"传递价值"?通过引用或通过值传递?,但我没有找到该术语含义的权威答案.

我认为"通过引用传递"意味着"将引用(通常是指针)传递给对象",因此被调用者可以修改调用者看到的对象,而"按值传递"意味着复制对象,并让被调用者玩得开心(显而易见的问题:如果对象包含引用,深层复制或浅层).
唱FW变成了很多 地方 说: "按引用传递"的意思只是说,这里有一些说法,这意味着更多的,但仍然定义读

一种ParameterPassing模式,其中将实际参数的引用(或者如果你想在政治上不正确,指针)传递给形式参数; 当被调用者需要形式参数时,它取消引用指针以获取它.

我没有发现许多地方给出了更强的术语定义,在这个页面上,我发现"形式参数的左值设置为实际参数的左值".并且,如果我理解正确,这里使用相同的定义("形式参数仅作为实际参数的别名.")

事实上,我发现使用更强定义的唯一地方是反对这样一种观点,即在Java中,对象是通过引用传递的(这可能是由于我缺乏google-fu).

所以,如果我把事情弄清楚,那就是通过参考传递

class Thing { ... }
void byReference(Thing object){ ... }
Thing something;
byReference(something);
Run Code Online (Sandbox Code Playgroud)

根据第一个定义大致对应(在C中)

struct RawThing { ... };
typedef RawThing *Thing;
void byReference(Thing object){
    // do something
}
// ...
struct RawThing whatever = blah();
Thing something = &whatever;
byReference(something); // pass whatever by reference …
Run Code Online (Sandbox Code Playgroud)

java parameters terminology pass-by-reference

15
推荐指数
3
解决办法
7793
查看次数

更改方法中的数组会更改数组外部

我的变量范围有问题.

public static void main(String[] args){
    int[] test={1,2,3};
    test(test);
    System.out.println(test[0]+" "+test[1]+" "+test[2]);
}

static void test(int[] test){
    test[0]=5;
}
Run Code Online (Sandbox Code Playgroud)

我期望输出到1 2 3,但结果是5 2 3.为什么我在方法中更改了数组中的值,但原始数组发生了变化?

java variables scope

15
推荐指数
1
解决办法
2万
查看次数

更改方法中的变量值,Java

我有一个关于在Java中更改方法中的变量值的问题.

这是我的代码:

public class Test {
    public static void funk(int a, int[] b) { 
        b[0] = b[0] * 2; 
        a = b[0] + 5;
    } 

    public static void main(String[] args) {
        int bird = 10;
        int[] tiger = {7};

        Test.funk(bird, tiger);
    }
}
Run Code Online (Sandbox Code Playgroud)

执行该方法后Test.funk(bird, tiger),bird的值不会更改 - 它保留值10,即使在funk()方法中我们更改了值a = b[0] + 5;

另一方面,数组中元素的值会发生变化,因为我们有语句 b[0] = b[0] * 2;

我不明白为什么一件事改变而另一件事没改变?有人可以帮我解释一下.

java scope

14
推荐指数
1
解决办法
7万
查看次数

从Java角度看C指针和数组的教程

我现在是大学新生,主修CS.我刚刚完成了我的"计算机程序设计入门"课程.我喜欢它,觉得我学到了很多东西.

几天前,我读了乔尔的"Java学校的危险"."链接列表?" 我想,"那些甚至都不是很难.我们已经完成了一些已经上课的人." 这是正确的,因为在Java中,它们并不那么难.但无论如何,我试着用C语言写一个.

它太难了!

Joel是对的,我认为...... Java为你处理了许多小小的东西,它真的不那么难.但我决心克服我学校的Java-tude并学习如何在C中写下这个dang链表.

所以我想,有人问,有没有人知道学习C的好(和免费)在线教程,而不是试图提出很多很小的问题?具体来说,学习如何处理指针,以及所有那些符号(&,*,**,[]以及它们如何协同工作),我想,认为我已经在Java中很精通,所以我不需要对如何写教程一个"你好,世界!" 程序.但是我绝对不准备进入任何超级高级的C或C++,因为我所知道的只是Java.

任何帮助赞赏!

c java arrays pointers

14
推荐指数
1
解决办法
646
查看次数

数组中的数组是否有变化?

我写这样的时候:

public class test {

    void mainx()
    {
        int fyeah[] = {2, 3, 4};
        smth(fyeah);
        System.out.println("x"+fyeah[0]);
    }

    void smth(int[] fyeah)
    {
        fyeah[0] = 22;
    }
}
Run Code Online (Sandbox Code Playgroud)

它打印x22;

我写这样的时候:

public class test {

    void mainx()
    {
        int fyeah = 5;
        smth(fyeah);
        System.out.println("x"+fyeah);
    }

    void smth(int fyeah)
    {
        fyeah = 22;
    }
}
Run Code Online (Sandbox Code Playgroud)

它不打印x22,但打印x5.

为什么在第二个版本函数中,值不会改变?它是否仅为数组元素更改值?

java arrays evaluation-strategy

14
推荐指数
1
解决办法
2万
查看次数

Java中指针和引用变量之间有什么区别?

我的Java书解释说,要使用对象,我们可以将它们分配给引用变量.这与指向对象的指针有什么不同?Java有指针吗?

谢谢 :)

java

14
推荐指数
3
解决办法
2万
查看次数

二叉树直径 - 更好的设计

我写了一个代码来查找二叉树的直径.需要以下建议:

  1. 我可以不在类级别使用静态变量吗?
  2. 算法是否正常/有什么建议吗?

    public class DiameterOfTree {   
    public static int diameter = 0; 
    public static int getDiameter(BinaryTreeNode root) {        
        if (root != null) {                     
            int leftCount = getDiameter(root.getLeft());
            int rightCount = getDiameter(root.getRight());
            if (leftCount + rightCount > diameter) {
                diameter = leftCount + rightCount;
                System.out.println("---diameter------------->" + diameter);
            }           
            if ( leftCount > rightCount) {
                return leftCount + 1;
            }
            return rightCount + 1;
        }
        return 0;
      }
    }
    
    Run Code Online (Sandbox Code Playgroud)

java algorithm tree recursion binary-tree

14
推荐指数
3
解决办法
2万
查看次数

在java中通过引用传递数组

可以像这样在java中传递一个数组作为参数int[5] &result吗?我想传递对数组的引用,因为我想在调用函数中更改数组.语法是什么?

java arrays reference

14
推荐指数
3
解决办法
5万
查看次数

为什么Java中的最终实例类变量?

如果实例变量设置为final,则其值不能更改为

public class Final {

    private final int b;

    Final(int b) {
        this.b = b; 
    }

    int getFinal() {
        return  b = 8;  // COMPILE TIME ERROR 
    }
}
Run Code Online (Sandbox Code Playgroud)


在代码的某处我看到实例类变量 HashMap被 声明为final

 private  final Map<String, Object> cacheMap = new HashMap<String, Object>();
Run Code Online (Sandbox Code Playgroud)

我不明白为什么这样宣布?通常在这种情况下它被声明.这是否意味着如果我放入哈希映射然后我无法更改其值?

编辑:
如果声明为final的cacheMap作为参数传递给另一个类,那么如果我更改其引用,则不会显示final的错误.为什么会这样?

 class CacheDTO {

    private Map conditionMap;

    public Map getConditionMap() {
        return conditionMap;
    }

    public void setConditionMap(Map conditionMap) {
        this.conditionMap = conditionMap;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后

private  final Map<String, Object> cacheMap = new HashMap<String, Object>();
CacheDTO cc = …
Run Code Online (Sandbox Code Playgroud)

java final

14
推荐指数
2
解决办法
1万
查看次数

Activity类之外的Android上下文

我正在尝试处理我的应用程序中的异常.我正在尝试记录异常,然后使用Toast提醒用户存在问题.我在我的所有类中都有这个工作查找扩展Activity.

但是,在任何没有扩展活动的类中,我都无法使用toast方法,因为我无法获取当前上下文.有没有一种简单的方法来解决这个问题,还是我的班级应该扩展活动?

android android-context android-activity

13
推荐指数
1
解决办法
1万
查看次数