黑马程序员技术交流社区

标题: 关于String类型的变量和其他变量相加? [打印本页]

作者: 金肖    时间: 2012-5-13 20:14
标题: 关于String类型的变量和其他变量相加?
本帖最后由 金肖 于 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的呢
                }
}
作者: 云惟桉    时间: 2012-5-13 20:21
String.CASE_INSENSITIVE_ORDER  ?
楼主是用这个字段是什么意思?
怎么能打印一个比较器呢?
作者: 倪杭乘    时间: 2012-5-13 20:27
这个加号是算数运算符,编译器不能识别通过"."或者方法就识别两边的是字符串
不确定的两边不能相加,有可能是对象相加,既是是基本数据类型相加boolean和其它基本数据类型也不能相加
作者: 金肖    时间: 2012-5-13 20:29
云惟桉 发表于 2012-5-13 20:21
String.CASE_INSENSITIVE_ORDER  ?
楼主是用这个字段是什么意思?
怎么能打印一个比较器呢? ...

但是为什么 + “ ” 后就ok了呢
作者: 倪杭乘    时间: 2012-5-13 20:33
应该说是编译器无法明确两边的数据类型
作者: 张亭    时间: 2012-5-13 22:13
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
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-14 00:31
金肖 发表于 2012-5-13 20:29
但是为什么 + “ ” 后就ok了呢

楼上已经给出正解
作者: 金肖    时间: 2012-5-14 07:56
噢.......啦!
作者: It's_Zero    时间: 2012-5-14 11:42
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. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2