小编use*_*726的帖子

为什么Java中没有无符号左移运算符

我有以下代码:

int a = -1;
System.out.println(a<<1);
Run Code Online (Sandbox Code Playgroud)

这打印-2.这意味着保留了符号位.Java中没有未签名的左移运算符.我的问题是,如果你想推掉符号位,就像你使用int不存储值,但是包含代表某些东西的位模式?

java

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

实例变量定义和实例块

我有以下一段代码 -

{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

6
推荐指数
1
解决办法
113
查看次数

从Java原语转换为包装类

在将基元分配给包装类引用时,我对Java编译器的行为感到困惑.请参阅下面的代码.带注释的行不会编译.

我不明白为什么的逻辑:

  1. a byte可以分配给a ByteShort但不分配IntegerLong引用
  2. a short可以分配给a ByteShort但不分配IntegerLong引用
  3. 一个int可以被分配给一个Byte,Short或者Integer,但不Long引用
  4. 一个long可以被分配到一个Long,但不是Byte,ShortInteger参考

我看不出这种模式.任何洞察力都会非常有用.谢谢.

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)

java boxing type-conversion

5
推荐指数
1
解决办法
1426
查看次数

Java三元运算符语法

我有以下代码.这就是我理解它的方式.

在第一种情况下,三元运算符返回的值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)

java syntax ternary-operator

3
推荐指数
1
解决办法
336
查看次数

如何将资源文件打包到可运行的jar中

我已经在很多方面尝试了这个,并遵循了几个在线指令,比如这个 - Eclipse导出的Runnable JAR没有显示图像 但到目前为止,没有成功.

我有一个非常简单的程序,它读取文本文件(test.txt)并将其内容打印到标准输出.我正在使用Eclipse.这是我所做的 -

  • 我把文本文件放到一个名为'resources'的文件夹中
  • 我右键单击资源文件夹,选择"构建路径"并点击"用作资源文件夹"
  • 在我的代码中,我尝试了两种方式来处理文件 - (a)作为"/test.txt",(b)作为"resources/test.txt.后一种方法在Eclipse中运行程序时有效.但是,当我将项目导出为可运行的jar文件时,该方法有效.资源文件夹无法包含在jar文件中.

任何帮助都感激不尽.

附录:这是代码.

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 eclipse

2
推荐指数
1
解决办法
5070
查看次数

同步方法是否对此进行锁定

我正在阅读一本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,并且可以由线程修改,而另一个线程在其中一个同步方法中.那可能吗??同步方法是否在此处保留线程,这意味着该对象中的所有内容都包含公共变量?

java thread-safety

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

重写hashcode()方法后的奇怪结果

我有以下情况 -

  1. 我正在使用泛型创建一个HashMap.键的类型为TestHashMap,值的类型为String.

  2. 在TestHashMap的main方法中,我使用三个TestHashMap实例作为键来存储三个不同的字符串.

  3. 我重写hashcode()方法,以便在每次调用时返回一个不同的整数.

  4. 然后我在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)

java hashmap

0
推荐指数
1
解决办法
72
查看次数