草庐IT

java - 转换在 Java 中需要多少处理和内存使用?

我正在考虑是否有两个指针更好,一个用于每个对象子类和父类(superclass),或者我是否应该只使用转换。这使用了多少系统资源:objectName.functionOne();((SubClass)objectName).functionOther();是否优于:SuperClassobjectA=(SuperClass)getSameInstance();SubClassobjectB=getSameInstance();objectA.functionOne();objectB.functionOther();基本上,我的主要问题是关于转换使用的资源,而不是制作额外的指针。似乎

java - 使用类型转换添加字节,Java

我正在尝试在一个字节数组中添加两个值。这是我的代码:byte[]ars={3,6,9,2,4};ars[0]=(byte)ars[0]+(byte)ars[4];System.out.println(ars[0]);我在编译时遇到这个错误:Main.java:9:possiblelossofprecisionfound:intrequired:bytears[0]=(byte)ars[0]+(byte)ars[4];^1error我们一如既往地非常感谢您的帮助。 最佳答案 接近,但有点偏离。ars[0]=(byte)(ars[0]+

java - 在 Java 中的 ArrayList 之间进行转换

抱歉,我以为这是一个继承问题:它一直是一个ArrayList问题!好的,我的问题比我想象的更具体。所以我有两个类(class)家庭。卡片和区域。区域是用来存放卡片的盒子。Zone的前两个子类ZoneList和ZoneMap是两种不同的卡片存储方式。进一步的子类,例如Hand和PokerHand,有自己特定的方式来处理它们存储的牌。复杂的是Card也有子类,例如PokerCard,而ZoneList和ZoneMap的子类就是用来组织这些子类的。所以在ZoneList中我有protectedArrayListcardBox;在PokerHand中,我希望能够声明cardBox=newArr

java - List<List<?>> 和 List<List> 是 java 中不兼容的类型

这个问题在这里已经有了答案:CannotconvertfromListtoList>(3个答案)关闭7年前。我没有得到这段代码以任何方式编译:Lista=newArrayList();List>b=newArrayList();a=b;//incompatibletypesb=a;//incompatibletypesjava好像没有考虑List和List在涉及泛型时是同一类型。这是为什么呢?有什么好的出路吗?上下文有一个具有以下签名的库函数:publicSet>getSubTypesOf(finalClasstype).这适用于作为参数传递的简单类型,但在泛型的情况下,结果未使用通配

java - 为什么 Java 的 +=、-=、*=、/= 复合赋值运算符不需要转换?

直到今天,我认为例如:i+=j;只是一个快捷方式:i=i+j;但是如果我们尝试这样做:inti=5;longj=8;那么i=i+j;将无法编译,但i+=j;可以正常编译。这是否意味着实际上i+=j;是类似这样的东西的快捷方式i=(i的类型)(i+j)? 最佳答案 与往常一样,JLS拥有这些问题的答案。在这种情况下§15.26.2CompoundAssignmentOperators.摘录:AcompoundassignmentexpressionoftheformE1 op= E2isequivalenttoE1 = (T)((E1

java - javac 完成的任何类型转换?

据我了解,如果可以在编译期间进行类型检查,那么类型转换将在编译期间完成,不会产生任何运行时开销。例如publicChildgetChild(){Parento=newChild();return(Child)o;}类型转换是在编译期间还是在运行时完成的?是否有任何通用规则来决定类型转换是由javac编译器还是由VM完成的? 最佳答案 其实这种情况存在三种可能:javac编译器可以执行优化。JIT编译器可以执行优化。JIT编译器的native代码可以包含执行运行时类型检查的代码。我希望它是选项1或2。但这可能是特定于平台的。事实上,在

java - 使用通用数组的 ArrayList 转换 ArrayList.toArray()

一个我几乎要放弃所有希望的难题。我想做一个函数,但在获取ArrayList.toArray()返回我想要的类型时遇到问题。这是演示我的问题的最小示例:publicstaticT[]test(Tone,Ttwo){java.util.Listlist=newArrayList();list.add(one);list.add(two);return(T[])list.toArray();}通常我可以使用(T[])list.toArray(newT[0])的形式,但是有两个额外的困难:由于协方差规则,我无法对数组进行类型转换,(T[])myObjectArray给出了一个ClassCast

java - 在 Java 中从 MongoDB 读取 Integer 字段时出现长类型转换错误

我正在从Rails应用程序写入的Java访问MongoDB实例。我正在检索应存储在Long中的整数值,因为它们可以超过32位。此代码将编译:this.profile_uid=(Long)this.profile.get("uid");但是,我遇到类型转换运行时错误:Exceptioninthread"main"java.lang.ClassCastException:java.lang.Integercannotbecasttojava.lang.Long这大概是因为该字段由Mongo作为Integer返回,但我知道某些ID可以作为Longs出现,并且出于各种原因我无法更改写入DB的类

java - 为什么 *= 在将 float 隐式转换为 int 时不给出任何错误?

这个问题在这里已经有了答案:Whydon'tJava's+=,-=,*=,/=compoundassignmentoperatorsrequirecasting?(11个答案)关闭9年前。我之前遇到过一种情况,我尝试了以下两段代码:intscore=100;score=score*1.05;和intscore=100;score*=1.05;第一个失败了(很明显,我试图隐式地将float转换为int)。但是第二个工作得很好。编译器没有提示,我也没有收到任何运行时错误。为什么第二个有效,而第一个无效?据我所知,x*=y只是x=x*y的简写。

Java 数组窄转换规则

根据JLS7,5.1.6NarrowingReferenceConversion•FromanyarraytypeSC[]toanyarraytypeTC[],providedthatSCandTCarereferencetypesandthereisanarrowingreferenceconversionfromSCtoTC.Object[]objArr={"a","b","c"};String[]strArr=(String[])objArr;//ClassCastException在上面的例子中,objArr和strArr都是引用类型,并且存在从Object到String的窄引