我正在创建一个应该与任何类型的数字(浮点数,整数等)的数组一起使用的类,因此,这里有一种方法:
// T extends Number
public synchronized T[] average() {
Number[] ret = new Number[queue[0].length];
for (int i = 0; i < ret.length; ++i) {
for (int j = 0; j < size; ++j) {
ret[i] += queue[j][i]; // WTF ERROR?!
}
ret[i] /= size; // WTF ERROR?!
}
return (T[])ret;
}
否则将无法编译,因为“ Number”没有实现“ + =”或“ / =”运算符。更糟糕的是,java的Number类甚至没有实现最基本的运算符,例如“
+”或“-”!如果java因为认为无法添加数字而不允许我进行编译,那么如何制作一个返回数字数组平均值的方法呢?
您误解了数字在Java中的工作方式。的Number
类是数字包装类(的超类Integer
,Float
等)用于表示原始类型(有用int
,float
等)为对象,但它确实
不 与通常的算术运算符的工作。
如果打算使用算术运算符,请使用基本类型。如果需要构建适用于所有数值数据类型的“通用”方法,则别无选择,只能构建同一方法的多个重载版本,例如,每种数据类型都应重载一个版本:
public float[] average(float[][] queue) {...}
public double[] average(double[][] queue) {...}
还应注意,这样的代码 似乎 适用于包装器类型:
Integer i = 0;
i += 1;
System.out.println(i);
......但引擎盖下,Java是自动装箱和拆箱的Integer
,因为+=
运营商只适用于原始类型。之所以起作用,是因为我们明确指出该数字为Integer
,但不适用于Number
,因为Java需要准确
知道 它要执行装箱/拆箱处理的数字类型。
问题内容: 到目前为止,我一直没有通过网络进行搜索,该语句始终具有if和else条件,例如。我想知道三元语句是否可以不使用。假设我有以下代码,如果不为空,我想关闭 (我正在使用Java编程语言。) 问题答案: 不,你不能那样做。 而是尝试以下方法:
void 运算符 void运算符的作用是执行一个表达式,然后不返回任何值,或者说返回undefined。 void 0 // undefined void(0) // undefined 上面是void运算符的两种写法,都正确。建议采用后一种形式,即总是使用圆括号。因为void运算符的优先性很高,如果不使用括号,容易造成错误的结果。比如,void 4 + 7实际上等同于(void 4) + 7。
问题内容: 有谁知道为什么 不执行?这意味着您无法对排序,这在我看来有点奇怪。 讨论后更新: 感谢所有有用的回复。最后,我对该主题进行了更多研究。 为什么java.lang.Number不实现Comparable的最简单解释源于可变性问题。 对于位的检讨,是抽象的超类型的,,,,,,,,和。在该列表中,并以没有实现。 深入研究,我发现在可变类型上实现不是一种好习惯,因为在比较期间或之后对象可能会更
据我所知,Java中的String concatenation""运算符是使用Stringbuilder实现的,例如: 内部编译为: 所以我尝试了这样的东西: 接下来,我使用==运算符相互测试了这些。结果主要是我所期望的:foo2和foo4没有为任何其他字符串返回“==”。 但是,fo3==fo1返回true。这是什么原因?StringBuilder类的toString方法内部调用“new Str
A task is special because knowing when a task is about to exit is useful in these circumstances: Frameworks know when to render the UI. Measuring enter/leave allows knowing total script/task time. Exi