草庐IT

java - 在 Java HashMap 中保留一对原语

我有一个文件列表。我想扫描并计算相同大小的文件数量。问题在于filesize很长,正如我们所知,hashmap将只接受一个对象而不是一个基元。因此,我使用newLong(filesize)将其放入HashMap中。我没有得到一对(filesize,count),而是得到了一个(filesize,1)的列表,因为每个Longobj都是唯一的。我该如何构建这个累加器?1.4.2的任何解决方案? 最佳答案 你只需这样做:Mapcount=newHashMap();for(Filefile:files){longsize=file.getT

java - Java 中的同步构造是否在内部(以某种方式)使用硬件原语 CAS 操作?

我很难理解synchronized语句和关联的notify()、notifyAll的硬件支持是什么()和wait()方法,出现在每个java对象上。我已阅读并知道如何使用此构造,但我一直假设它们直接映射到硬件原语。当我深入研究有关并发的书籍时,我只读到了硬件直接提供的比较和交换(CAS)操作。似乎这个构造是由JVM本身创建/维护的。如果我的理解是正确的,每个对象都包含一些状态,其中包含有关访问它的线程的信息。这用于定义该对象的监视器并协调多个线程对该对象的访问。但如果是这样的话,如何通过并发访问管理这个状态本身?它肯定必须得到管理,对吗?是CAS吗?如果是CAS,那就意味着只有一种真正

java - 在 Java 中安全地从长对象转换为长原语的惯用方法

我试图将一个Long对象值传递给一个需要long原语的方法,直接传递有效,但Long对象为null的情况除外。在这种情况下,我得到一个空指针异常。Longfoo=null;bar.methodExpects_long_primitive(foo);我可以创建一个检查foo是否为null并跳过调用该方法,例如Longfoo=null;if(foo!=null){bar.methodExpects_long_primitive(foo);}或者如果我想提供一个默认值Longfoo=null;bar.methodExpects_long_primitive(foo==null?default

java - 匿名内部类在访问其原语等时是否总是捕获对 "this"(外部)对象的引用?

如果我有[编辑:添加了“Inner”的类型定义]interfaceInner{publicvoidexecute();}classOuter{intouterInt;publicvoidhello(){Innerinner=newInner(){publicvoidexecute(){outerInt=5;}}//laterinner.execute();}}调用inner.execute()会将那个特定Outer对象的outerInt变量设置为5,无论从何处调用,只要Inner对象存在?或者它只会更改outerInt变量的副本而不影响原始Outer对象?

java - 为什么类型兼容性在覆盖方法时也不适用于原语?

当我们说基类Base及其派生类Derived是类型兼容时,我们指的是Base引用可以引用Derived实例。IE。Baseb=newDerived();相反,由于类型不兼容,因此需要进行强制转换。现在这个概念是否不适用于原始类型?我是说这个shortshortNumber=10;intintNumber=shortNumber;对我来说似乎是同一件事(因为也不需要强制转换,short和int都是整数类型)。因此,当覆盖基类中的方法时,为什么返回类型与基类的返回类型相同或至少类型兼容是可以接受的,但这也不适用于整数类型?例如。为什么这是NotAcceptable?publicclassP

Java 映射和原语

我想创建一个采用String的映射作为键和一个primitive作为值。我正在查看Java文档,但没有看到Primitive是一种类类型,或者它们共享某种包装类。如何将值限制为原始值?Mapmap=newHashMap(); 最佳答案 JavaAutoboxing允许在Long,Integer,Double上创建map然后使用原始值操作它们。例如:java.util.HashMapmap=newjava.util.HashMap();map.put("one",1);//1isaninteger,notaninstanceofInt

java - Eclipse 报告数组 clone() 方法来自其相应的类型(包括原语)?

我假设当eclipse建议方法时,它的形式是():-而且张贴的图片中的所有方法(但clone()除外)似乎也是如此。但是对于clone(),eclipse表示该方法来自数组的类型(在本例中为byte)。对于所有基本类型数组和引用类型数组都是一样的。例如:对于String[]它给出clone():String[]-String这是什么意思?我的理解错了吗?还是clone()方法中有其他东西?为了说清楚,我的问题是为什么Eclipse说“clone()”来自byte而它应该来自byte[],就像“length”一样。 最佳答案 这个只能

java - 扩大和装箱 Java 原语

扩展和装箱Java原语。我知道不可能将包装类从一个扩展到另一个,因为它们不是来自同一继承树。为什么不能将基元扩展为另一种基元类型并自动装箱扩展的基元?鉴于可以将字节参数传递给需要int的方法,为什么不能将以下示例中的字节扩展为int,然后装箱为Integer?classScjpTest{staticvoidgoInteger(Integerx){System.out.println("GoingwithanInteger");}staticvoidgoInt(intx){System.out.println("Goingwithanint");}publicstaticvoidmain

java - 什么原语用于实现 synchronized 关键字?

当我们在java中使用synchronized关键字时,到底使用了哪个同步原语?锁、信号量、监视器、互斥量?编辑:JVM如何在native级别实现锁? 最佳答案 在字节码级别,java有monitorenter和monitorexit操作,记录在thispageofTheJavaVirtualMachineSpecification,下面粘贴了片段(objectref是操作的操作数,取自堆栈):monitorenter片段Eachobjecthasamonitorassociatedwithit.Thethreadthatexecu

java - 原语的显式初始化

我知道Java原语有默认的初始化值;例如0代表int。根据我的研究,我似乎不应该依赖这些值。我应该始终提供显式初始化吗?如果是,在哪里?这是我的程序的一部分:publicclassCalculator{//Initializevaluewhereit'sdeclared?privateintvalue;publicCalculator(){//Initializevalueinconstructor?}publicvoidadd(intother){value+=other;}} 最佳答案 使用Java生成的默认值是绝对可以的,您不