当我调用时,call('a');它输出"char"并且它很好,因为char原始类型将优先于将其装入Character.
static void call(char i){
System.out.println("char");
}
static void call(Character i){
System.out.println("Character");
}
Run Code Online (Sandbox Code Playgroud)
如何调用call('a', 'a');是模棱两可的?
static void call(char i, Character j){
System.out.println("char");
}
static void call(Character i, Character j){
System.out.println("Character");
}
Run Code Online (Sandbox Code Playgroud)
我想的是第二个参数编译器必须去Boxing和第一个参数完全匹配是char原始类型,所以调用call('a','a');可以解析为call(char i, Character j)方法.
显然我理解错了,有人请解释一下.
解释特定这种示例的一些链接将是有帮助的.
我是Java NIO的新手,没有动手.关于Java NIO我知道它比java.IO快.
所以,只是试一试,我想到编写简单的程序"将一个文件的内容复制到另一个文件"."从大文件中搜索一个单词".
同时使用java.io和java.nio包.
另外,我分别在操作开始和结束之前和之后打印时间.
我没有发现任何差异,因为NIO更快.我可能会走错方向.
任何人都可以引导我通过我可以通过示例正确看到差异的场景吗?
编辑:
我很惊讶地知道这个问题会得到反对票.我已经提到我是NIO的新手并指导我,如果我走向错误的方向.我没有发布一个程序,因为它是非常基本的读写操作...请参阅下面我用来测试的程序....
使用IO
public static void copyFile(File in, File out) throws Exception {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
Date now = new Date();
String strDate = sdf.format(now);
System.out.println("Before Read :"+strDate);
FileInputStream fis = new FileInputStream(in);
FileOutputStream fos = new FileOutputStream(out);
try {
byte[] buf = new byte[1024];
int i = 0;
while ((i = fis.read(buf)) != -1) {
fos.write(buf, 0, i);
}
}
catch (Exception e) {
throw e;
}
finally …Run Code Online (Sandbox Code Playgroud) 是否可以在运行时设置属性文件中的值.
我尝试了这个,它在读取属性的同时发生了变化,但是当我在文件中检查到没有反映出变化时.
try {
Properties props = new Properties();
props.setProperty("ServerAddress", "ee");
props.setProperty("ServerPort", "123");
props.setProperty("ThreadCount", "456");
File f = new File("myApp.properties");
OutputStream out = new FileOutputStream( f );
props.store(out, "This is an optional header comment string");
System.out.println(props.get("ServerPort"));
out.close();
}
catch (Exception e ) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
输出:123.
我需要有一个属性文件应用程序,并通过GUI网页配置可以更改.
可能重复:
Java是"传递引用"吗?
嗨,我已经开发了以下代码.在交换方法中,我交换了两个对象的引用.然后它将在被调用的方法(这里是swap())中更改但在主方法中没有改变.为什么?
class Check
{
public void swap(PassByRefDemoMain obj1,PassByRefDemoMain obj2)
{
PassByRefDemoMain temp;
temp=obj1;
obj1=obj2;
obj2=temp;
System.out.println(obj1.id+ " "+ obj2.id);
}
}
public class PassByRefDemoMain {
int id;
PassByRefDemoMain(int id)
{
this.id=id;
}
public static void main(String[] args) {
PassByRefDemoMain obj1=new PassByRefDemoMain(10);
PassByRefDemoMain obj2=new PassByRefDemoMain(20);
Check obj=new Check();
obj.swap(obj1,obj2);
System.out.println(obj1.id + " " + obj2.id);
}
}
Run Code Online (Sandbox Code Playgroud) 在使用String类的replaceAll API时,我遇到了Null Pointer Exception.
然后我尝试用下面粘贴的小片段,我正在接受NPE.
String s = "HELLO @WORLD@ I AM.";
System.out.println(s.replaceAll("@WORLD@", null)) ;
Run Code Online (Sandbox Code Playgroud)
我也发现在String.java类中
public Matcher appendReplacement(StringBuffer sb, String replacement) {
.......//code
while (cursor < replacement.length()) { ..//code}
.......//code
}
Run Code Online (Sandbox Code Playgroud)
所以这里它称之为replacement.length()NPE的原因.
是否有规则我们不能将第二个参数作为null传递?
我知道如果替换单词为null,JVM将替换什么.
我阅读了一些关于易变性线程缓存的文章,发现它没有例子太简短,所以初学者很难理解.
请帮我理解下面的程序,
public class Test {
int a = 0;
public static void main(String[] args) {
final Test t = new Test();
new Thread(new Runnable(){
public void run() {
try {
Thread.sleep(3000);
} catch (Exception e) {}
t.a = 10;
System.out.println("now t.a == 10");
}
}).start();
new Thread(new Runnable(){
public void run() {
while(t.a == 0) {}
System.out.println("Loop done: " + t.a);
}
}).start();
}
}
Run Code Online (Sandbox Code Playgroud)
当我做a变量volatile和运行我的程序那么一段时间后停止,但是当我删除volatile到a变量,那么它的推移,我的程序不会停止.
我对volatile的了解是"当变量被声明为volatile时,线程将直接读/写到变量内存而不是从本地线程缓存读/写.如果没有声明volatile,那么可以看到实际值更新的延迟."
另外,根据我对刷新缓存副本的理解,我认为程序会在一段时间内停止但是为什么在上面的程序中它继续运行而不是更新.
那么什么时候Thread引用它的本地缓存开始引用主副本或者用主副本刷新它的值?
如果我理解错了,请纠正我.
请用一些小代码片段或链接向我解释.