相关疑难解决方法(0)

Java Pass By Value和Pass By Reference

我已经做了以下示例来检查我的知识

import java.util.Map;

public class HashMap {
    public static Map<String, String> useDifferentMap(Map<String, String> valueMap) {
        valueMap.put("lastName", "yyyy");
        return valueMap;
    }

    public static void main(String[] args) {
        Map<String, String> inputMap = new java.util.HashMap<String, String>();
        inputMap.put("firstName", "xxxx");
        inputMap.put("initial", "S");
        System.out.println("inputMap : 1 " + inputMap);
        System.out.println("changeMe : " + useDifferentMap(inputMap));
        System.out.println("inputMap : 2 " + inputMap);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出是:

original Map : 1 {initial=S, firstName=xxxx}
useDifferentMap : {lastName=yyyy, initial=S, firstName=xxxx}
original Map : 2 {lastName=yyyy, initial=S, firstName=xxxx}
Run Code Online (Sandbox Code Playgroud)

此方法useDifferentMap获取地图并更改值并返回相同的值.修改后的地图将包含修改后的值,其范围为useDifferentMap方法的本地范围. …

java hashmap pass-by-reference pass-by-value

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

在单独的方法中初始化Java对象:为什么这不起作用

这是我无法分辨的事情我很惊讶它不会起作用,但无论如何我找到这个案例的解释很有意思.想象一下,我们有一个对象:

SomeClass someClass = null;
Run Code Online (Sandbox Code Playgroud)

并且该方法将此对象作为参数来初始化它:

public void initialize(SomeClass someClass) {
  someClass = new SomeClass();
}
Run Code Online (Sandbox Code Playgroud)

然后我们打电话:

initialize(someClass);
System.out.println("" + someClass);
Run Code Online (Sandbox Code Playgroud)

它将打印:

null
Run Code Online (Sandbox Code Playgroud)

谢谢你的回答!

java methods constructor initialization

8
推荐指数
1
解决办法
4230
查看次数

参考对象与值参考

我在这里阅读这篇评论:在Java中通过引用传递字符串?

是的,这是一种误解.这是一个巨大而广泛的误解.这导致我讨厌的一个采访问题:("Java如何传递参数").我讨厌它,因为大约一半的采访者实际上似乎想要错误的答案("基于价值的原语,通过引用的对象").正确的答案需要更长的时间,而且似乎会混淆其中一些.并且他们不会被说服:我发誓我在技术屏幕上不及格,因为CSMajor型筛选者在大学里听到了误解,并认为它是福音.FEH. - CPerkins于2009年8月13日14:34

有人可以解释一下,新程序员可以掌握,说:

"在Java中,原语通过值传递,对象通过引用传递."

和:

"在Java中,没有任何内容通过引用传递,引用按值传递."?

这些陈述在某种意义上都是真的吗? 我不想邀请咆哮游行,但这听起来像一个非常重要的概念,而我仍然不完全理解.

java pass-by-reference pass-by-value

8
推荐指数
3
解决办法
1418
查看次数

在像 Dart 这样的现代语言中,传递引用的真正含义是什么?

Futures在 Dart 中工作,我遇到了一个有趣的问题。

import 'dart:async';

class Egg {
  String style;
  Egg(this.style);
}

Future cookEggs(List<Egg> list) =>
  new Future(() =>
    ['omelette','over easy'].forEach((_) => list.add(new Egg(_)))
  );

Future cookOne(Egg egg) => new Future(() => egg = new Egg('scrambled'));

void main() {
  List<Egg> eggList = new List();
  Egg single;

  cookEggs(eggList).whenComplete(() => eggList.forEach((_) => print(_.style));
  cookOne(single).whenComplete(() => print(single.style));
}
Run Code Online (Sandbox Code Playgroud)

预期的输出是:

omelette
over easy
scrambled
Run Code Online (Sandbox Code Playgroud)

cookEggs使List<Eggs>工作正常的函数,但访问 的style属性single不成功并抛出一个NoSuchMethodError.

我首先认为这可能与传递引用有关,但我不明白为什么 Dart 会传递List引用而不是Egg. 现在我认为这种差异可能与赋值 …

scope future pass-by-reference variable-assignment dart

8
推荐指数
3
解决办法
2000
查看次数

在java中,为什么new运算符在数据类型之前没有用来分配内存?

如果我们需要newoperator为对象分配内存,那么为什么我们不在数据类型之前使用它来分配内存?

class-name class-var =  new class-name();
new int a;
Run Code Online (Sandbox Code Playgroud)

java new-operator

8
推荐指数
1
解决办法
491
查看次数

如何在不更改Kotlin中的基础对象的情况下将对象复制到另一个对象?

这是我的代码:

var header1: Record? = null
var header2: Record? = null

header2 = header1
header2.name = "new_name"
Run Code Online (Sandbox Code Playgroud)

但也有header1.name变化!

object duplicates kotlin

8
推荐指数
1
解决办法
5504
查看次数

循环和一半控制

我们什么时候使用循环半?此外,是否应该有人简要阐述如何编写代码?

java loops break while-loop

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

Java增量运算符查询(++ i和i ++)

我有以下代码:

public class Book {
    private static int sample1(int i) {
        return i++;
    }
    private static int sample2(int j) {
        return ++j;
    }

    public static void main(String[] arguments){ 
        int i = 0;
        int j = 0;
        System.out.println(sample1(i++)); //0
        System.out.println(sample1(++i)); //1
        System.out.println(sample2(j++));//1
        System.out.println(sample2(++j));//2
        System.out.println(i);//2
        System.out.println(j);//2
    }
}
Run Code Online (Sandbox Code Playgroud)

我的预期输出在评论中.实际输出如下:

0
2
1
3
2
2
Run Code Online (Sandbox Code Playgroud)

我对函数调用和incemental运算符感到困惑.有人可以解释实际结果吗?

java increment

7
推荐指数
3
解决办法
5160
查看次数

在运行时更新Dropwizard配置

是否可以让我的应用程序在运行时更新配置设置?我可以轻松地在我的UI中公开我想要的设置,但有没有办法允许用户更新设置并使它们永久保存,即将它们保存到config.yaml文件中?我可以看到它手动更新文件的唯一方法然后重启服务器似乎有点限制.

java dropwizard

7
推荐指数
2
解决办法
5502
查看次数

java中的const函数参数?

有没有办法const在Java中实现类似于C++的东西?具体来说,我有一个像

private static Vector2 sum(Vector2 vec1, Vector2 vec2) {
    return vec1.cpy().add(vec2);
}
Run Code Online (Sandbox Code Playgroud)

而且我想

  1. 在签名中明确表示它不会修改它的参数,
    并且
  2. 强制它不修改它的参数(最好是在编译时,但插入运行时断言也可以).

现在我知道java严格按引用传递(我只是戏弄,我知道它是传值,或者更确切地说是复制 - 引用).我的意思是,在Java中,当您调用方法时,将复制引用,但该引用指向相同的对象内容.如果类具有公共字段或setter,则被调用的方法始终可以修改传递的对象的内容.是否有任何例如注释@NotNull或工具来防止这种情况?我刚刚发现JetBrains注释@Contract(pure = true),但我不认为它们提供任何检查.

java const-correctness

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