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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘海源 中级黑马   /  2012-7-25 19:11  /  3524 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
* String类的特点:
* 1,Java语言中用于描述最常见的字符串数据的对象。
* 2,字符串数据都是一个对象。
* 3,字符串数据一旦初始化就不可以被改变了。双引号表示的都是字符串常量。
* 4,字符串对象都存储在常量池中。 字符串常量池。
*
*
*/
public class StringDemo {
/**
  * @param args
  */
public static void main(String[] args) {
  
  //定义一个字符串。
  //String str = "abcd";
  
  String s1 = "abcd";//这时在常量池中创建了一个字符串对象。
  //System.out.println(str==s1);//true
  
  String s2 = new String("abcd");//这是在堆内存创建一个String类的对象。并在常量池创建了"abcd"对象。
  System.out.println(s1);
  System.out.println(s2);
  System.out.println(s1==s2);//false
  //对于字符串对象的比较,应该用equals方法完成。
  //记住,基本数据用==进行比较相同。 对象比较相同都用equals方法。
  System.out.println(s1.equals(s2));//String类覆盖了Object中的equals方法,比较的是字符串内容是否相同。
  
  String s3 = "ab"+"cd";
  System.out.println(s1==s3);//true.
  
  
}
}
问题是字符串和字符之间有啥区别呢,字符就没有equals方法吗,字符之间的比较是??????

无标题.png (16.97 KB, 下载次数: 72)

无标题.png

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

10 个回复

倒序浏览
String是引用数据类型,char是基本数据类型。
如果你想比较两个char类型的变量,要通过阿斯克码进行比较。每
个字符对应一个阿斯克码值。获得字符的阿斯克码值,需要把char类型转化成int。例如:
int as='男'  这样就获得了男的阿斯克码值。
直接两个字符比较应该也是可以的。例如'a'=='b'
回复 使用道具 举报
String是引用类型,char是基本类型,String就是一堆char字符按照某种顺序排列的集合,这些字符包括中文字符,没啥重大区别。
回复 使用道具 举报
String主要是一个字符串类变量的表示,用来存放字符串,如 “gsgsdfdssdf”,用引号括起来的是一个字符串,char 则是表示一个unicode类型的字符双字节 用单引号括起来 如 'b'。
回复 使用道具 举报
韦念欣 发表于 2012-7-25 23:12
String是引用类型,char是基本类型,String就是一堆char字符按照某种顺序排列的集合,这些字符包括中文字符 ...

那么char类型的可以转换成String类型吗
回复 使用道具 举报
刘海源 发表于 2012-7-25 23:49
那么char类型的可以转换成String类型吗

当然可以,请看代码:
char ch = '好';
String str = new String(ch);
System.out.println(str);  // 输出:好
回复 使用道具 举报
韦念欣 发表于 2012-7-25 23:58
当然可以,请看代码:
char ch = '好';
String str = new String(ch);

这是强转吗,为啥要new 一个String对象了
回复 使用道具 举报
韦念欣 黑马帝 2012-7-26 00:08:58
8#
刘海源 发表于 2012-7-26 00:01
这是强转吗,为啥要new 一个String对象了

这不是强转,而是生成一个String对象。
你的要求是将这个char转换为String,那么转换的方法就是new一个String,然后把char扔进构造函数中,即可得到这个char所对应的String类型的对象,这个转换由String类内部完成。
回复 使用道具 举报
韦念欣 发表于 2012-7-26 00:08
这不是强转,而是生成一个String对象。
你的要求是将这个char转换为String,那么转换的方法就是new一个St ...

奥是怎样啊,今天做了道题怎么也没弄明白现在明白了,谢谢你了
回复 使用道具 举报
准确的说!其实char类型也是整形类型的!
就是用了16位(2 个字节)去存储的一整数。这就是为什么char类型能够和整形数据转换。
  1. int a = 'c';
  2. char b = 99;
  3. System.out.println(a);
  4. System.out.println(b);
复制代码
上面的代码也就证明了,计算机内部对char类型是用整形存储的。而对于一个char只有255 位。所有只存储了16位。
关于String类,你如果去看jdk的源码就会发现,其实String类就是利用char[]数组实现的。
有点数据结构基础的话,应该是能懂的。
char为什么没有equals方法,因为本来就是基本数据类型。何来的方法。
对于基本数据类型的比较用==.
String则不同,它是引用数据类型。或者说是一类。那么类当然就有它的成员方法。
就比如int只是一个基本数据类型。那么它是没有成员方法的。
但是它的包装类Integer却是引用数据类型。所有就具有了成员方法。
回复 使用道具 举报
好像版主特别喜欢字符串的比较问题。。。。
//记住,基本数据用==进行比较相同。 对象比较相同都用equals方法。  这里就错了,引用数据类型可以用==比较。用==比较时比较的是其引用内存地址。
  System.out.println(s1.equals(s2));//String类覆盖了Object中的equals方法,比较的是字符串内容是否相同。
  String s3 = "ab"+"cd";//你这个不是字符了,还是字符串。//不适用new创建一个字符串对象。会查找是否已创建相同字符串。有就直接传递应用内存地址。加号绕了个弯而已
  System.out.println(s1==s3);//true==比较内存地址
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马