C++;Java中的代码含义与转换

C++;Java中的代码含义与转换,java,c++,Java,C++,我有一本C++ char *s, mask; // Some code If(*s == 0){ //Some more code} If(*s & mask){ //Some code} 在Java中,我可以这样写吗 byte s,mask; //Some code If(s == (byte)0x0){ //Some more code} If((s & mask) != (byte)0x0){ //Some Code} java代码正确吗> P>未定义的未

我有一本C++

char *s, mask;
// Some code

If(*s == 0){ //Some more code}

If(*s & mask){ //Some code}
在Java中,我可以这样写吗

byte s,mask;
//Some code 
If(s == (byte)0x0){ //Some more code}   
If((s & mask) != (byte)0x0){ //Some Code} 

java代码正确吗> P>未定义的未初始化指针的默认值。您必须显式地初始化它。在java中,类型<代码>字节的默认值是“代码> 0”/Cube >,除非它是局部变量,在这种情况下,您也必须显式初始化它。C++中的

< P> >此代码是未定义的行为:

If(*s == 0)  // 's' is not initialized

我认为在Java中,eclipse类型的编辑器可能会抱怨未初始化的
s
。在读取变量之前,最好先用任何一种语言初始化变量。

最有可能的翻译(这看起来像是某种低级解析;对于二进制字节数组的扫描,应该使用“unsigned char”):

字节[]s;//有某种价值

对于(int i=0;i,C++代码是否真的说了<代码>(*s= 0)< /> >,还是它确实说<代码>(s=0)< /代码>?在第一个过程中,你检查“代码> s < /C> >什么是0,而在第二个,你检查<代码> s <代码>是否为空指针。这是两个非常不同的事情。

java没有指针,所以这个代码不能直接翻译成java。

这应该相当于C++代码:

    byte s[], mask;

    if (s[0] == 0) { /*Some more code*/ }

    if ((s[0] & mask) != 0) {/*Some code*/}
<>代码>代码> >代码>在C++代码中可能会得到<强>递增< /强>,在这种情况下,java示例中的代码> s(0)应该更改为<代码> s [POS ] < /C> >:
    byte s[], mask;
    // initialize s[] to store enough bytes
    int pos;
    if (s[pos = 0] == 0) { pos++; /* Some code */ }

    if ((s[pos] & mask) != 0) {/*Some code*/}

但只对成员变量;局部变量没有初始化为默认值,必须显式初始化某个值,如果没有,则会有编译错误。你正在编写字符集转换吗?<代码> <代码>:是的,我们在C++和java.初始化s变量,在*s==0。* s点指向对象或什么?它是什么?检查对象是否为空或wat?
*s
s
指向的对象-它检查
s
指向的对象是否为0。不涉及任何对象,
s
是指向
char
的指针。它检查
s
指向的
char
是否为0。在C中,字符串通常为零项因此,这看起来像是检查一个字符串是否为空。这就表明,没有显示的代码几乎肯定会增加有趣的猜测。即使如此,这也是一个不错的C++到java映射。假设“代码> char *< /COD>是一个字节数组。我将更新答案,以反映潜在的增量<代码> s>代码> MMM……在索引器旁边,在“某些代码”的开头增加一个post;我认为我的版本看起来更“规范”(即使pos++在正确的位置,你也会在我的for循环中编写
continue
)@sehe,当然,不管怎样。我们甚至不知道OP想要什么shehe——很有趣,它是这样工作的:)。我通常不提这些问题。我的目标不是增加混乱。
    byte s[], mask;
    // initialize s[] to store enough bytes
    int pos;
    if (s[pos = 0] == 0) { pos++; /* Some code */ }

    if ((s[pos] & mask) != 0) {/*Some code*/}