如果我有一个ArrayList,并且我添加了一个对象,后来我修改了这个对象,这个更改是否会反映在ArrayList中?或者当我将对象添加到ArrayList时,Java会创建一个副本并将其添加到ArrayList中吗?
如果我将对此对象的引用更改为null,该怎么办?这是否意味着ArrayList中的对象现在也为null?
多年来,我尽力避免instanceof.在适用的地方使用多态或访问者模式.我认为在某些情况下它只是简化了维护...是否还有其他一些应该注意的缺点?
但我确实在Java库中看到它,所以我认为它有它的位置?在什么情况下更可取?难道不可避免吗?
好的,我在我的代码中实现了这个SO问题:随机返回True或False
但是,我有一些奇怪的行为:我需要同时运行十个实例,其中每个实例每次运行只返回一次true或false.令人惊讶的是,无论我做什么,每次我得到的都是false
有没有什么可以改进方法,所以我至少有大约50%的机会获得true?
为了使它更容易理解:我将我的应用程序构建到JAR文件,然后通过批处理命令运行
java -jar my-program.jar
pause
Run Code Online (Sandbox Code Playgroud)
程序的内容 - 使其尽可能简单:
public class myProgram{
public static boolean getRandomBoolean() {
return Math.random() < 0.5;
// I tried another approaches here, still the same result
}
public static void main(String[] args) {
System.out.println(getRandomBoolean());
}
}
Run Code Online (Sandbox Code Playgroud)
如果我打开10个命令行并运行它,我false每次都得到结果......
如何设置标签文本的颜色?
myLabel.setText("Text Color: Red");
myLabel.???
Run Code Online (Sandbox Code Playgroud)
我可以在一个标签中使用两种单独的颜色吗?
例如这里:
该"Text Color:"是黑色,"Red"是红色的.
鉴于此计划:
class Test {
public static void main(String[] args) {
try {
throw new NullPointerException();
} catch (NullPointerException npe) {
System.out.println("In catch");
} finally {
System.out.println("In finally");
}
}
}
Run Code Online (Sandbox Code Playgroud)
Sun javac(v 1.6.0_24)生成以下字节码:
public static void main(java.lang.String[]);
// Instantiate / throw NPE
0: new #2; // class NullPointerException
3: dup
4: invokespecial #3; // Method NullPointerException."<init>":()V
7: athrow
// Start of catch clause
8: astore_1
9: getstatic #4; // Field System.out
12: ldc #5; // "In catch"
14: invokevirtual …Run Code Online (Sandbox Code Playgroud) 当我尝试在 Heroku 上启动我的应用程序时,我得到了以下堆栈跟踪。它只是一个基本的 ts.app,就像您在 ts-node 和 nodemon 中看到的那样。如果您需要更多信息,请告诉我,因为这是我的第一篇文章。我真的很想知道答案是什么。
2020-05-30T00:03:12.201106+00:00 heroku[web.1]: Starting process with command `npm start`
2020-05-30T00:03:14.405285+00:00 app[web.1]:
2020-05-30T00:03:14.405303+00:00 app[web.1]: > discordtoornamentmanager@1.0.0 start /app
2020-05-30T00:03:14.405303+00:00 app[web.1]: > ts-node src/App.ts
2020-05-30T00:03:14.405304+00:00 app[web.1]:
2020-05-30T00:03:14.833655+00:00 app[web.1]: (node:23) ExperimentalWarning: The ESM module loader is experimental.
2020-05-30T00:03:14.839311+00:00 app[web.1]: TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for /app/src/App.ts
2020-05-30T00:03:14.839312+00:00 app[web.1]: at Loader.defaultGetFormat [as _getFormat] (internal/modules/esm/get_format.js:65:15)
2020-05-30T00:03:14.839314+00:00 app[web.1]: at Loader.getFormat (internal/modules/esm/loader.js:113:42)
2020-05-30T00:03:14.839315+00:00 app[web.1]: at Loader.getModuleJob (internal/modules/esm/loader.js:244:31)
2020-05-30T00:03:14.839315+00:00 app[web.1]: at processTicksAndRejections (internal/process/task_queues.js:97:5)
2020-05-30T00:03:14.839316+00:00 app[web.1]: at Loader.import (internal/modules/esm/loader.js:178:17)
2020-05-30T00:03:14.847801+00:00 app[web.1]: …Run Code Online (Sandbox Code Playgroud) 我偶尔会使用一个volatile实例变量,在这种情况下,我有两个线程读取/写入它并且不希望获得锁定的开销(或潜在的死锁风险); 例如,计时器线程定期更新在某些类上作为getter公开的int ID:
public class MyClass {
private volatile int id;
public MyClass() {
ScheduledExecutorService execService = Executors.newScheduledThreadPool(1);
execService.scheduleAtFixedRate(new Runnable() {
public void run() {
++id;
}
}, 0L, 30L, TimeUnit.SECONDS);
}
public int getId() {
return id;
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题:鉴于JLS只能保证32位读取将是原子有任何一点曾经使用挥发性长时间?(即64位).
警告:请不要回复说使用volatile结束synchronized是预优化的情况; 我很清楚如何/何时使用,synchronized但有些情况volatile更可取.例如,在定义用于单线程应用程序的Spring bean时,我倾向于使用volatile实例变量,因为无法保证Spring上下文将初始化主线程中的每个bean的属性.
在我看来{ case ... => ... },部分函数的语法至少需要一个case:
scala> val pf: PartialFunction[String, String] = { case "a" => "b" }
pf: PartialFunction[String,String] = <function1>
scala> val pf: PartialFunction[String, String] = { }
<console>:5: error: type mismatch;
found : Unit
required: PartialFunction[String,String]
val pf: PartialFunction[String, String] = { }
^
Run Code Online (Sandbox Code Playgroud)
那么,定义"空"部分函数的最佳方法是什么?难道还有比"手动"覆盖更好的办法isDefinedAt和apply?
关于OpenJDK邮件列表上调用的工具有一些嗡嗡声sjavac.此外,还有两个相关的JEP:JEP 139:增强javac以提高构建速度和JEP 199:智能Java编译,第二阶段.
我的问题是:
sjavac工具?免责声明:自我回答的问题.只是想将此工具的知识带到StackOverflow社区,并创建对未来sjavac FAQ的参考.
例如,有一个字符串val s = "Test".你怎么把它分成t, e, s, t?