答案:是。即使是web容器也有main方法,比如tomcat的Bootstrap类的main方法。
答案:没有。
double d1 = Double.NaN; double d3 = d1; System.out.println("d3 == d1 : " + (d3 == d1));
上面的代码输出true还是false?
答案:false。
double d1 = Double.NaN; double d2 = Double.NaN; System.out.println("d1 == d2 : " + (d1 == d2)); System.out.println("Double.NaN == Double.NaN : " + (Double.NaN == Double.NaN));
上面的代码输出true还是false?
答案:false。
总结,java中所有的非数值都是不相等的。
答案:使用Double.isNaN(double)或Float.isNaN(float)。其实现是一个数不等于自己,就是NAN:
public static boolean isNaN(double v) { return (v != v); }
答案:两个或四个。在java中char类型用UTF-16描述一个代码单元。常用汉字用一个代码单元表示。有些汉字用两个代码单元表示。一个代码单元code point包含16bit。
char占用2个字节,使用Unicode字符集,使用UTF-16编码。有些汉字是存储不了的。
其实是Unicode的设计保证的。为了将一个WORD的UTF-16编码与两个WORD的UTF-16编码区分开来,Unicode编码的设计者将0xD800-0xDFFF保留下来,并称为代理区(Surrogate)。
High Private Use Surrogates
高位专用替代
Low Surrogates
低位替代
8.你知道Unocide代码单元(code unit )和代码点(code point)的区别吗?或者已知" "占用四个字节,你知道下面的代码输出是什么吗?
String s2 = " "; System.out.println(s2.getBytes().length); System.out.println(s2.codePoints().count()); System.out.println(s.length()); System.out.println(s.codePointCount(0, s.length()));
答案:4 、1、 2、1。第一个代表占用多少字节。第二个代表Unicode代码点个数,也就是字符个数。第三个代表需要几个Unicode code units,相当于需要几个char来存储。第四个也代表字符个数。
int ⅦⅢ齉__8s好; int αβ; int IIasdf; int $as; int _sdf; int 9sdf;
答案:除了最后一个不合法,其他都合法。也就是说下划线、美元符、汉字或其他语言中的字母都可以用来命名变量,并且可以作为开头。阿拉伯数字不可以作为开头。
可以使用下面两个方法来检测字符是否可以用来组成变量名或者作为变量名开头。
Character.isJavaIdentifierPart('齉'); Character.isJavaIdentifierStart('9');
java希望所有的运算在不同的机器上运行结果应该是一样的,即保证可移植性。例如double w = x y / z; 很多Intel的处理器会把x y 的结果保存在80位寄存器中,再除以z,然后把结果截断为64位。这样可以得到一个更精确的结果,而且避免产生溢出。这样的话就与使用64位寄存器的计算结果不一致。JVM最初规定,所有中间结果都需要截断,但是遭到数值计算团体的反对。因为截断不仅浪费时间,而且可能导致溢出。最终JVM的设计者,允许中间结果采用扩展的精度。但是对于strictfp关键字标记的方法,必须使用严格的浮点计算,也就是所有中间值都进行截断。
答案:没有。只有>>> >> <<。
boolean cond1 = somemethod1(); boolean cond2 = somemethod2() // 第一组 if(cond1 && cond2){ ... } // 第二组 if(cond1 & cond2){ ... }
答案:第一组有阻断功能;第二组没有阻断功能。
答案:Math类中有些方法并不是严格的浮点计算,但是效率较高。StrictMath中都是严格的浮点计算。“严格”的含义,参考上文中 ++strictfp关键字的作用++ 。
下面的代码有问题吗?
byte b = 1; short s = b; short s1 = s + b;
答案:byte类型+short类型,得到的是int类型。所以第三行代码报错。但是可以自动将byte转换成short,所以第二行代码是可以的。
String s1 = "asd" + "qwe";
String s2 = s1.substring(1);
答案:不会。因为只有字符串常量才会放到字符串池中,而+或substring等操作产生的结果并不会放到字符串池。
public class Goto_Demo { public static void main(String[] args) { inIfBlock(true); System.out.println("----------分隔符----"); inBlock(true); } private static void inIfBlock(boolean bool){ 结束: if(bool){ System.out.println("in "); if(bool){ break 结束; } System.out.println("after "); } System.out.println("out "); } private static void inBlock(boolean bool){ 结束: { System.out.println("in "); if(bool){ break 结束; } System.out.println("after "); } System.out.println("out "); } }
以上代码哪个方法可以输出“after”?
答案:goto标签可以用于if语句或块语句。上面代码都不会输出“after”。
答案:数组初始化时,“最外围的”数组长度必须给定(比如二维数组的最外围就是行)。长度可以是变量。长度可以为0。注意数组长度为0与null是不同的概念。
int[] arr = new int[2]; int[][] arr2 = new int[2][]; int[] arr3 = new int[0];
答案:如果返回值 r>=0,表示找到相应元素,返回的是数组下标值。如果返回值 r<0,则(-r-1)就是插入v元素时,为保持数组a有序,应该插入的位置。
int[][] arr = {{1, 2, 3}, {4, 5}}
答案:支持,不报错。因为Java实际上是没有多维数组,只有一维数组。多维数组被解释成数组的数组。比如,二维数组的每一行是一个一维数组的引用,我们可以实现行的互换。
不用,凡是在java.lang包下的java预定义类,在使用时都不需要import!
Java语言中的java.lang包是由编译器直接自动导入的,因此,编程时使用该包中的类,可省去 import导入。使用其他包中的类,必须用import导入