我正在学习Java,来自C,我发现这种boolean类型的语言之间有一个有趣的区别.在C中没有bool/ ean所以我们需要使用数字类型来表示布尔逻辑(0 == false).
我想在Java中不起作用:
int i = 1;
if (i)
System.out.println("i is true");
Run Code Online (Sandbox Code Playgroud)
也没有通过类型转换来改变条件:
if ((boolean)i)
Run Code Online (Sandbox Code Playgroud)
除了做以下事情之外:
if ( i != 0 )
Run Code Online (Sandbox Code Playgroud)
还有其他方法可以对int类型进行C-ish逻辑检查吗?只是想知道是否有任何Java技巧允许非布尔类型的布尔逻辑像这样.
编辑:
上面的例子非常简单,并使自己适应狭隘的思维范围.当我最初问这个问题时,我也在考虑函数调用的非布尔返回.例如Linux fork()调用.它本身不会返回int,但我可以很好地使用条件的数字返回值,如:
if( fork() ) {
// do child code
Run Code Online (Sandbox Code Playgroud)
这允许我处理子项的条件中的代码,而不是为父项处理代码(或者对于错误的负返回结果).
所以我目前还不知道足够的Java给出一个好的"Java"示例,但那是我最初的意图.
在我深入研究实际代码之前,我试图让JNI正常工作,但是在我从C++编译DLL并运行我的Java应用程序后,我得到:
Exception in thread "main" java.lang.UnsatisfiedLinkError: <snip>\workspace\JNI test\native\jnitest.dll: %1 is not a valid Win32 application
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary1(Unknown Source)
at java.lang.ClassLoader.loadLibrary0(Unknown Source)
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at net.condorcraft110.jnitest.JNITest.main(JNITest.java:11)
Run Code Online (Sandbox Code Playgroud)
谷歌搜索了一下,我知道这通常是由于尝试使用32位JVM加载64位DLL引起的.但是,我的JVM是64位,sun.arch.data.model相当于64位.
我的makefile:
CLASSPATH = ../bin
vpath %.class $(CLASSPATH)
all : jnitest.dll
jnitest.dll : jnitest.o
g++ -m64 -Wl,--add-stdcall-alias -shared -o $@ $<
jnitest.o : jnitest.cpp jnitest.h
g++ -m64 -I"C:\Program Files\Java\jdk1.7.0_51\include" -I"C:\Program Files\Java\jdk1.7.0_51\include\win32" -c $< -o $@
jnitest.h : net/condorcraft110/jnitest/JNITest.class
javah -verbose -classpath $(CLASSPATH) -o …Run Code Online (Sandbox Code Playgroud)
我正在编写一个类来与服务器进行通信,但是当它尝试在输入流的帮助下构造ObjectInputStream时程序正在冻结.Theres没有Exception,程序仍然在运行,但挂起在它试图构造ObjectInputstream的行中.
下面是我的问题所在方法的代码:
@Override
public void connect(String ip, int port) throws UnknownHostException, IOException {
Socket socket = new Socket(ip, port);
out = new ObjectOutputStream(socket.getOutputStream());
InputStream is = socket.getInputStream();
in = new ObjectInputStream(is);
}
Run Code Online (Sandbox Code Playgroud)
这是整个班级的代码:
package Client;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class MessageStreamerImpl implements MessageStreamer {
ObjectOutputStream out;
ObjectInputStream in;
public MessageStreamerImpl(String ip, int port) throws UnknownHostException, IOException{
connect(ip, port);
}
public MessageStreamerImpl(){
}
@Override
public void …Run Code Online (Sandbox Code Playgroud)