Java基础两个小问题?
int i=2006;
byte b=(byte)i;
System.out.println(b); //为什么是-42 不是214;
String s1=new String("中国.四川");
String s2=new String("中国.四川");
System.out.println(s1==s2); //为什么是true 不是false
我的环境JDK1.5+JCreator,请各位帮忙解释解释,谢谢!
问题点数:50、回复次数:6Top
1 楼btb368()回复于 2006-05-02 08:57:40 得分 10
byte能够表示的最大正数是,你的数字是214已经超出了表示范围,所以214-256=-42
判断符"=="是判断两个对象是否相等,是否指向同一个字符串.Top
2 楼grant999(民)回复于 2006-05-02 08:59:46 得分 30
1.class A{
public static void main(String s[]){
int i=2006;
System.out.println(Integer.toBinaryString(i));
byte b=(byte)i;
System.out.println(Integer.toBinaryString(b));
System.out.println(b);
}
}
class A{
public static void main(String s[]){
int i=2006;
System.out.println(Integer.toBinaryString(i));
byte b=(byte)i;
System.out.println(Integer.toBinaryString(b));
System.out.println(b);
}
}
输出:
G:\>java A
11111010110
11111111111111111111111111010110
-42
节取2006的底8位,11010110,最高位是1,被看作是负数!!
2. String s1=new String("中国.四川");
String s2=new String("中国.四川");
System.out.println(s1==s2); //为什么是true 不是false
结果是:G:\>java A
false
楼主可能看错了
Top
3 楼cheng_young(古道西风瘦马)回复于 2006-05-02 09:01:00 得分 5
1.byte能表示的范围是-128到127,溢出了
2.唯一的解释是编译器作了优化,String的intern方法可将字符串加到string poolTop
4 楼grant999(民)回复于 2006-05-02 09:16:53 得分 5
new 一个对象的话,是在堆中分配了唯一的内存空间!!
class A{
public static void main(String s[]){
String s1=new String("中国.四川");
s1.intern();
String s2=new String("中国.四川");
System.out.println(s1==s2); //为什么是true 不是false
}
}
结果是:false
class A{
public static void main(String s[]){
String s1=new String("中国.四川");
String s3=s1.intern();
System.out.println(s1==s3); //为什么是true 不是false
}
}
结果是:false
class A{
public static void main(String s[]){
String s1="中国.四川";
String s3=s1.intern();
System.out.println(s1==s3); //为什么是true 不是false
}
}
结果是:trueTop
5 楼best_threewood( Do it !)回复于 2006-05-02 09:19:37 得分 0
String s1=new String("中国.四川");
String s2=new String("中国.四川");
System.out.println(s1==s2); //为什么是true 不是false
你这样写的结果是false,而不是true.因为“==”比较的是地址,你为这两个字符串开辟了两个空间,地址当然不同。
如果你如下写的话,返回的就是true,因为他们的指针指向的都是同一个地址:
String s1 = new String("中国.四川");
String s2;
s2 = s1;
System.out.println(s1==s2);
当然如果你如下写的话,返回的自然就是true了,因为他们比较的是字符串的内容:
String s1=new String("中国.四川");
String s2=new String("中国.四川");
System.out.println(s1.equals(s2));Top
6 楼gatesxiang(莽哥)回复于 2006-05-02 09:29:45 得分 0
第一问题 大意了byte的取值范围
第二问题 看错了结果
谢谢各位,下次一定小心。Top




