我有以下代码:
int a = -1;
System.out.println(a<<1);
Run Code Online (Sandbox Code Playgroud)
这打印-2.这意味着保留了符号位.Java中没有未签名的左移运算符.我的问题是,如果你想推掉符号位,就像你使用int不存储值,但是包含代表某些东西的位模式?
我有以下一段代码 -
{s = "Hello";}
String s;
Run Code Online (Sandbox Code Playgroud)
这编译得很好,这意味着变量定义在实例阻塞之前执行.但是,如果我使用以下代码,则不会编译("错误:非法转发引用").
{s = "Hello"; String ss = s;}
String s;
Run Code Online (Sandbox Code Playgroud)
因此,在变量定义之前出现的实例块中,不可能在语句的右侧使用's'的值.对幕后发生的事情有一个明智的解释,还是这只是Java的特殊功能?
PS我之前看过一个类似的问题,唯一的解释是它是Java的一个特性.我写这篇文章是为了询问社区这是否确实是这个问题的最后一句话.
在将基元分配给包装类引用时,我对Java编译器的行为感到困惑.请参阅下面的代码.带注释的行不会编译.
我不明白为什么的逻辑:
byte可以分配给a Byte或Short但不分配Integer或Long引用short可以分配给a Byte或Short但不分配Integer或Long引用int可以被分配给一个Byte,Short或者Integer,但不Long引用long可以被分配到一个Long,但不是Byte,Short或Integer参考我看不出这种模式.任何洞察力都会非常有用.谢谢.
Byte s5 = (byte)7;
Short s6 = (byte)7;
Integer s7 = (byte)7; // Does not compile
Long s8 = (byte)7; // Does not compile
Byte s9 = (short)7;
Short s10 = (short)7;
Integer …Run Code Online (Sandbox Code Playgroud) 我有以下代码.这就是我理解它的方式.
在第一种情况下,三元运算符返回的值y,因为x=4和打印语句打印5,符合市场预期.
在第二种情况下,三元运算符首先将y的值赋给x,然后返回该值.再次,它按预期打印5.
在第三种情况下,三元运算符x=y位于以下的左侧:和 x=z右侧:.我希望这与第二种情况非常相似.但是,这个语句甚至没有编译.
任何理解这一点的帮助将非常感激.
public class Test {
public static void main(String[] args) {
int x = 4;
int y = 5;
int z = -1;
x = (x == 4) ? y : z; // compiles and runs fine
System.out.println(x + " " + y + " " + z);
x = (x == 4) ? x = y : z; // compiles and runs fine …Run Code Online (Sandbox Code Playgroud) 我已经在很多方面尝试了这个,并遵循了几个在线指令,比如这个 - Eclipse导出的Runnable JAR没有显示图像 但到目前为止,没有成功.
我有一个非常简单的程序,它读取文本文件(test.txt)并将其内容打印到标准输出.我正在使用Eclipse.这是我所做的 -
任何帮助都感激不尽.
附录:这是代码.
public class FileIOTest {
public static void main(String[] args) {
String line;
try {
BufferedReader br = new BufferedReader(new FileReader(new File("/test.txt")));
while((line = br.readLine()) != null){
System.out.println(line);
}
br.close();
}
catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}
}
Run Code Online (Sandbox Code Playgroud)
}
我正在阅读一本Java书,并发现了以下问题.
在下面的代码中,类线程是否安全?
public class Queen
{
public int x;
public synchronized int getX()
{
return x;
}
public synchronized void setX(int x)
{
this.x = x;
}
public static void main(String args[])
{
}
}
Run Code Online (Sandbox Code Playgroud)
我的回答是肯定的,因为只有两个方法都是同步的,所以当其中一个方法正在运行时,它会锁定对象,而另一个方法无法运行.
但是,官方答案是NO,并且解释是变量int x是public,并且可以由线程修改,而另一个线程在其中一个同步方法中.那可能吗??同步方法是否在此处保留线程,这意味着该对象中的所有内容都包含公共变量?
我有以下情况 -
我正在使用泛型创建一个HashMap.键的类型为TestHashMap,值的类型为String.
在TestHashMap的main方法中,我使用三个TestHashMap实例作为键来存储三个不同的字符串.
我重写hashcode()方法,以便在每次调用时返回一个不同的整数.
然后我在HashMap中提取密钥并打印出相应的值.
这给了我完全意想不到的结果 - 我得到了三个键值对的每个值的null.
请注意,如果不是在hashcode()的不同调用上返回不同的整数,我只返回相同的整数,一切正常.
这让我非常困扰.任何帮助都感激不尽.
这是代码.如果按原样复制它,您应该可以运行它.
import java.util.HashMap;
import java.util.Set;
public class TestHashMap {
private static int hash = 0;
public static void main(String[] args) {
HashMap<TestHashMap,String> h = new HashMap<TestHashMap,String>();
TestHashMap thm1 = new TestHashMap();
TestHashMap thm2 = new TestHashMap();
TestHashMap thm3 = new TestHashMap();
h.put(thm1, "one");
h.put(thm2, "two");
h.put(thm3, "three");
Set<TestHashMap> keys = h.keySet();
for(TestHashMap k : keys){
System.out.println(k + " " + h.get(k));
}
}
@Override
public …Run Code Online (Sandbox Code Playgroud)