Java 8最有用的功能之一是default接口上的新方法.基本上有两个原因(可能还有其他原因)为什么会被引入:
Iterator.remove()Iterable.forEach()从API设计者的角度来看,我希望能够在接口方法上使用其他修饰符,例如final.在添加便捷方法时,这将非常有用,可防止在实现类时出现"意外"覆盖:
interface Sender {
// Convenience method to send an empty message
default final void send() {
send(null);
}
// Implementations should only implement this method
void send(String message);
}
Run Code Online (Sandbox Code Playgroud)
如果Sender是一个类,上面已经是常见的做法:
abstract class Sender {
// Convenience method to send an empty message
final void send() {
send(null);
}
// Implementations should only implement this method
abstract void send(String message);
}
Run Code Online (Sandbox Code Playgroud)
现在,default并final有明显矛盾的关键字,但默认关键字本身不会一直严格要求 …
有没有办法在Java中声明unsigned int?
或者问题也可以这样构成:Java等同于unsigned?
只是告诉你我正在研究Java的实现的上下文String.hashcode().如果整数是32 unsigned int,我想测试碰撞的可能性.
由于一些莫名其妙的原因,byte原始类型是用Java签名的.这意味着有效值为-128..127而不是通常的0..255范围,表示一个字节中的8个有效位(没有符号位).
这意味着所有字节操作代码通常进行整数计算并最终屏蔽掉最后8位.
我想知道是否存在任何真实生活场景,其中Java byte原始类型完全适合,或者它是否只是一个完全无用的设计决策?
编辑:唯一的实际用例是本机代码的单字节占位符.换句话说,不要将其作为Java代码中的字节进行操作.
编辑:我现在已经看到一个内部紧密循环需要除以7(数字0..32)的位置,因此可以使用字节作为数据类型来完成查找表,以便考虑L1缓存使用时内存使用率保持较低.这不是指签名/无签名,而是实际使用的情况.
common_type<long, unsigned long>::type是unsigned long因为关于积分推广后的操作数标准说...
[...]如果具有无符号整数类型的操作数的秩大于或等于另一个操作数的类型的等级,则带有符号整数类型的操作数应转换为具有无符号整数类型的操作数的类型
不要调用整数提升系统错误,但似乎有一个更大的有符号整数类型,它可以表示应该使用的有符号和无符号操作数的范围.
我知道有些平台可能长==很长,在这种情况下上述规则可以生效.但如果是一个更大的符号整数类型可用,不应该应用它呢?
George Marsaglia编写了一个优秀的随机数发生器,它非常快速,简单,并且具有比Mersenne Twister高得多的周期.这是带有描述的代码:
我想将CMWC4096代码移植到Java,但它使用了几种无符号数据类型,因此我不确定如何正确执行此操作.这是完整的C代码:
/* choose random initial c<809430660 and */
/* 4096 random 32-bit integers for Q[] */
static unsigned long Q[4096],c=362436;
unsigned long CMWC4096(void) {
unsigned long long t, a=18782LL;
static unsigned long i=4095;
unsigned long x,r=0xfffffffe;
i = (i+1) & 4095;
t = a*Q[i] + c;
c = (t>>32);
x = t + c;
if (x < c) {
x++;
c++;
}
return (Q[i] = r - x);
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以将其移植到Java吗?当您只有签名号码时,这是如何工作的?
编辑:谢谢大家快速解答!对于前1亿个数字,这个java代码似乎产生与C代码相同的结果.它比Java的java.util.Random快3倍.
public class ComplimentaryMultiplyWithCarryRandom { …Run Code Online (Sandbox Code Playgroud) 关于Java支持哪些无符号数据类型,我有点困惑?
我读过这篇文章,但我不明白其非常复杂的解释(至少对我而言).
编程语言(例如c,c ++和java)通常有几种类型用于整数运算:
signed和unsigned类型short,int,long,long longint32_tvs int(我知道这int32_t不是语言的一部分)当你应该使用它们时,你会如何总结?
我刚刚遇到一种情况,其中无符号整数本来就非常有用(例如,任何负值都没有意义等等).令人惊讶的是,我发现Kotlin不支持无符号整数 - 并且似乎没有其他任何关于为什么(即使我看过).
我错过了什么吗?
我刚刚发现类中没有readUnsignedInt()方法RandomAccessFile.为什么?是否有任何解决方法从文件中读取unsigned int?
编辑:
我想从文件中读取unsigned int并将其放入一个长空间.
EDIT2:
不能使用readLong().它将读取8个字节而不是4个字节.文件中的数据在4字节范围内具有无符号整数.
EDIT3:
在这里找到答案:http://www.petefreitag.com/item/183.cfm
Edit4:
如果数据文件是little-endian怎么样?我们需要先换位?