我已经做了以下示例来检查我的知识
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方法的本地范围. …
这是我无法分辨的事情我很惊讶它不会起作用,但无论如何我找到这个案例的解释很有意思.想象一下,我们有一个对象:
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中通过引用传递字符串?
是的,这是一种误解.这是一个巨大而广泛的误解.这导致我讨厌的一个采访问题:("Java如何传递参数").我讨厌它,因为大约一半的采访者实际上似乎想要错误的答案("基于价值的原语,通过引用的对象").正确的答案需要更长的时间,而且似乎会混淆其中一些.并且他们不会被说服:我发誓我在技术屏幕上不及格,因为CSMajor型筛选者在大学里听到了误解,并认为它是福音.FEH. - CPerkins于2009年8月13日14:34
有人可以解释一下,新程序员可以掌握,说:
"在Java中,原语通过值传递,对象通过引用传递."
和:
"在Java中,没有任何内容通过引用传递,引用按值传递."?
这些陈述在某种意义上都是真的吗? 我不想邀请咆哮游行,但这听起来像一个非常重要的概念,而我仍然不完全理解.
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. 现在我认为这种差异可能与赋值 …
如果我们需要newoperator为对象分配内存,那么为什么我们不在数据类型之前使用它来分配内存?
class-name class-var = new class-name();
new int a;
Run Code Online (Sandbox Code Playgroud) 这是我的代码:
var header1: Record? = null
var header2: Record? = null
header2 = header1
header2.name = "new_name"
Run Code Online (Sandbox Code Playgroud)
但也有header1.name变化!
我有以下代码:
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运算符感到困惑.有人可以解释实际结果吗?
是否可以让我的应用程序在运行时更新配置设置?我可以轻松地在我的UI中公开我想要的设置,但有没有办法允许用户更新设置并使它们永久保存,即将它们保存到config.yaml文件中?我可以看到它手动更新文件的唯一方法然后重启服务器似乎有点限制.
有没有办法const在Java中实现类似于C++的东西?具体来说,我有一个像
private static Vector2 sum(Vector2 vec1, Vector2 vec2) {
return vec1.cpy().add(vec2);
}
Run Code Online (Sandbox Code Playgroud)
而且我想
现在我知道java严格按引用传递(我只是戏弄,我知道它是传值,或者更确切地说是复制 - 引用).我的意思是,在Java中,当您调用方法时,将复制引用,但该引用指向相同的对象内容.如果类具有公共字段或setter,则被调用的方法始终可以修改传递的对象的内容.是否有任何例如注释@NotNull或工具来防止这种情况?我刚刚发现JetBrains注释@Contract(pure = true),但我不认为它们提供任何检查.
java ×8
break ×1
constructor ×1
dart ×1
dropwizard ×1
duplicates ×1
future ×1
hashmap ×1
increment ×1
kotlin ×1
loops ×1
methods ×1
new-operator ×1
object ×1
scope ×1
while-loop ×1