A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 金肖 中级黑马   /  2012-5-13 20:14  /  2918 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 金肖 于 2012-5-13 20:21 编辑

public class Demo {
        public static void main(String[] args) throws Exception {
                String str = "bean.Student";
               
                System.out.println(Integer.MAX_VALUE+String.CASE_INSENSITIVE_ORDER);  //为什么次数回报错呢,
                                                                                                                                         //String类型的变量和任何类型变量相加最后不都是都返回一个字符串吗?
               System.out.println(Integer.MAX_VALUE+" ”+String.CASE_INSENSITIVE_ORDER);   //在他们之间加一个 " "  就是oK的呢
                }
}

9 个回复

倒序浏览
String.CASE_INSENSITIVE_ORDER  ?
楼主是用这个字段是什么意思?
怎么能打印一个比较器呢?
回复 使用道具 举报
这个加号是算数运算符,编译器不能识别通过"."或者方法就识别两边的是字符串
不确定的两边不能相加,有可能是对象相加,既是是基本数据类型相加boolean和其它基本数据类型也不能相加
回复 使用道具 举报
云惟桉 发表于 2012-5-13 20:21
String.CASE_INSENSITIVE_ORDER  ?
楼主是用这个字段是什么意思?
怎么能打印一个比较器呢? ...

但是为什么 + “ ” 后就ok了呢
回复 使用道具 举报
应该说是编译器无法明确两边的数据类型
回复 使用道具 举报
System.out.println(Integer.MAX_VALUE+String.CASE_INSENSITIVE_ORDER);
这里的+没涉及到字符串,进行的数值运算

System.out.println(Integer.MAX_VALUE+" ”+String.CASE_INSENSITIVE_ORDER);   
当表达式中包含字符串,+ 是字符串的连接运算符,而不是进行数字运算
回复 使用道具 举报
杨静 中级黑马 2012-5-13 22:45:11
7#
public static final Comparator<String> CASE_INSENSITIVE_ORDER A Comparator that orders String objects as by compareToIgnoreCase. This comparator is serializable  是一个序列化的数据,而前面的Integer.MAX_VALUE是一个int型的数据,错误报告说是The operator + is undefined for the argument type(s) int, Comparator<String>即是说加法运算符对两边的数据运算是没有定义的,在这里不是当做连接符处理的。而你在两者之中加上" "后根据运算符的结合性,会被认为是连接符因此就会运行正确。
回复 使用道具 举报
金肖 发表于 2012-5-13 20:29
但是为什么 + “ ” 后就ok了呢

楼上已经给出正解
回复 使用道具 举报
金肖 中级黑马 2012-5-14 07:56:11
9#
噢.......啦!
回复 使用道具 举报
String.CASE_INSENSITIVE_ORDER  这个是String 里的一个
public static final Comparator<String> CASE_INSENSITIVE_ORDER
                                         = new CaseInsensitiveComparator(); 方法
所以  你使用String.CASE_INSENSITIVE_ORDER  实际上是一个对象,而非一个变量,所以是不能直接用 " +  "的
代码示意如下:
  1. public class Demo {
  2.         public static void main(String[] args) throws Exception {
  3.                 String str = "bean.Student";
  4.                 final String s = "";
  5.                 System.out.println(Integer.MAX_VALUE + s);//不报错  s是数据值
  6.                 System.out.println(Integer.MAX_VALUE + " " + String.CASE_INSENSITIVE_ORDER);//不报错  把那个对象和 " "连接起来成了字符串
  7.                 System.out.println(Integer.MAX_VALUE + "" + new Demo());//同上
  8.                 System.out.println(Integer.MAX_VALUE + String.CASE_INSENSITIVE_ORDER);//报错String.CASE_INSENSITIVE_ORDER是一个对象 不能直接使用 " + "
  9.                 System.out.println(Integer.MAX_VALUE + new Demo());//报错  new Demo();是一个对象 不能直接使用 " + "
  10.                 System.out.println(String.CASE_INSENSITIVE_ORDER);//输出java.lang.String$CaseInsensitiveComparator@5483cd  是String中的  CaseInsensitiveComparator 对象
  11.         }
  12. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马