这两天看javaSE语言基础,看到一些以前没太注意的问题,在此记录一下。
问题1:
package com.ccit.yichu; public class LightSpeed { /** * 本实例主要测试整型变量的溢出 * 本程序计算光1000天所走的公里数 * 在本程序中将 second和distance的类型改成int程序不会报错,但结果是-127631360,原因是: * 对于类的成员变量,整型变量的默认初始值为0,但是在方法中声明的局部变量没有默认值, * 所以程序在编译的时候他们并没有被初始化,所以这是不存在溢出的问题, * 但是当程序运行时变量second和distance是int类型,无法表示25920000000000,发生了溢出,所以结果是错的 * @param args */ public static void main(String[] args) { int speed=300000; int days=1000; long second; long distance; second=days*24*60*60*365; distance=speed*second; System.out.println("光1000天走"+distance+"公里"); } }
问题2:
package com.ccit.bijiao; public class Denghao { /** * 本程序主要验证"=="和"equals()"函数在进行字符串比较时是否等价 * 结果是不等价的 * 注:String不是基本类型,而是引用类型,所以两个字符串相等(也就是"==")意味着两个引用指向同一空间 * 所以e和f尽管有长度相等,类型相同,值也相等,但是运算结果依然为false * e.equals(f)意味着e和f长度相等,类型相同,值也相等,但不一定指向同一空间 * @param args */ public static void main(String[] args) { String a="aaa"; String b="aaa"; String c,d; c="aaa"; d="aaa"; String e=new String("aaa"); String f=new String("aaa"); System.out.println("a==b----------"+(a==b)); System.out.println("a.equals(b)----------"+a.equals(b)); System.out.println("c==d----------"+(c==d)); System.out.println("c.equals(d)----------"+c.equals(d)); System.out.println("e==f----------"+(e==f)); System.out.println("e.equals(f)----------"+e.equals(f)); } }
问题3:
public class Test { /**本程序测试怎么将结果输出到文本文件中,要用到IO的知识 * 课本中的意思是在dos命令中运行javac编译java文件 * 然后运行java来运行Test.class文件, * 格式为:java Test>>F:\result.txt * 就可以将本程序的运行结果输出到F:\result.txt中 * 注意:本文件在默认包中的时候才能运行成功, * 对于Yest文件只能编译成功但是不能运行, * 会报找不到类的异常。 * 但是为什么会这样,现在还不明白?!! * * @param args */ public static void main(String[] args) { String a="hello world!"; System.out.printf(a); } }
今天请教了老师上述问题,所以来做一下补充:
我的Yest.java(Test打错了,呵呵)文件在com.ccit.print包下,所以用java运行.class文件的时候它就会自动去找com.ccit.print.Yest这个文件,所以我们在运行这个文件的时候应当在com的上一层目录输入:java com.ccit.print.Yest,这时就能成功运行。但是当我们进到com\ccit\print目录下,再运行java Yest就会报错。
然而当编译的时候我们进入com\ccit\print目录下输入javac Yest.java就能编译成功,如果我们在com的上层目录输入javac com.ccit.print.Yest.java就会报“找不到文件:com.ccit.print.Yest.java”的错误。
说完了,好啰嗦,呵呵。