CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

Java基础两个小问题?

楼主gatesxiang(莽哥)2006-05-02 07:49:48 在 Java / J2SE / 基础类 提问

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

相关问题

关键词

得分解答快速导航

  • 帖主:gatesxiang
  • btb368
  • grant999
  • cheng_young
  • grant999

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo