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,请各位帮忙解释解释,谢谢!

解决方案 »

  1.   

    byte能够表示的最大正数是,你的数字是214已经超出了表示范围,所以214-256=-42
    判断符"=="是判断两个对象是否相等,是否指向同一个字符串.
      

  2.   

    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
    楼主可能看错了
      

  3.   

    1.byte能表示的范围是-128到127,溢出了
    2.唯一的解释是编译器作了优化,String的intern方法可将字符串加到string pool
      

  4.   

    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
       }
    }  
    结果是:true
      

  5.   

    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));
      

  6.   

    第一问题 大意了byte的取值范围
    第二问题 看错了结果
    谢谢各位,下次一定小心。