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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© woshihq 中级黑马   /  2014-5-24 01:07  /  8526 人查看  /  57 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 woshihq 于 2014-5-25 15:50 编辑

初学Java,想问下为什么我这段代码运行不出正确的结果呢??
String  a=hello ;
String  b=hello;
if(a==b)
System.out.printf("a和b字符串相同");
“==”不是应该指两者相等时使用的吗???求解!!!

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

57 个回复

倒序浏览
不是==的问题,你声明的是字符串要加上“”才行
回复 使用道具 举报
1.定义的String类型需要“”
2println写错
回复 使用道具 举报
首先,,我想说的是,楼说指出的问题都是对的!!String赋值时要加上“”才表示是字符串!打印语句应该是
System.out.println();  或者是System.out.print();不同之处在于一个换行,一个不换行!
之后我要说的是一些基本的解决问题的办法,在编译时报错,它会指出你错在哪一行,是什么类型的错误,还有,,一些小错误会引起连锁反应!所以,编译报错时就可以有相应的办法!!如果不是运行时的错误,一般都能看得懂!它指出在哪行错了,你就去哪行找,,反复找几遍,再看看书上相应的示例,,应该就能找到问题的所以,但是有一点要注意,就是中文输入法和英文输入法是有区别的,有时不太容易找出来,最简单的办法就是,如果你实在是没有找到那行的错误,就检查一下输入法,把代码重新敲一遍!!查错误时,应该从报错的第一个开始得,,因为有的错误会起连锁反应,有时报很多错,但你改掉第一个,,就所有问题都解决了!

这是个人一点点经验,不喜勿喷!!!
回复 使用道具 举报
本帖最后由 编程学徙 于 2014-5-24 04:16 编辑

关于在字符串比较中equals方法和“==”运算符的不同之处。
首先,假定有字符串a和b.
a==b   这个boolean表达式,只要a和b 当中字符串内容相同,则值为true,否则,值为false;
a.equals(b)  这个boolean表达式,只有当a和b引用的是同一片内存时(同一片内存,字符串当然相同),其值才为true,否则,值都为false;

以下是代码验证:
  1. <blockquote>class Str01
复制代码
class Str01
{
        public static void main(String[] args)
        {
                String a = "hello";
                String b = "hello";
                String c = new String("hello");
                if(a==b)
                {
                        System.out.printf("a和b引用同一片内存\n");
                }
                else
                {
                        System.out.printf("a和b不引用同一片内存\n");
                }
                if(a.equals(b))
                {
                        System.out.printf("a和b字符串相同\n");
                }
                else
                {
                        System.out.printf("a和b字符串不同\n");
                }
                if(a==c)
                {
                        System.out.printf("a和c引用同一片内存\n");
                }
                else
                {
                        System.out.printf("a和c不引用同一片内存\n");
                }
                if(a.equals(c))
                {
                        System.out.printf("a和c字符串相同\n");
                }
                else
                {
                        System.out.printf("a和c字符串不同\n");
                }
        }
}



以下是运行结果:



12133.jpg (53.66 KB, 下载次数: 54)

12133.jpg

点评

楼主写的很精彩,就是上边写的文字当中有些小错误. a==b和a.equals(b)的论述写反了!  发表于 2015-4-23 20:45

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1 很给力!

查看全部评分

回复 使用道具 举报 3 1
首先说说==的用法,它属于比较运算符,结果是boolean类型的,如果是基本数据类型的话,比较的是==两边的值,如果是引用数据类型的话,比较的是引用变量指向的那个地址值。另外对于字符串你要用双引号引起来,如果是比较字符串的内容是否相同的话就用equals方法,具体代码如下,希望帮到你
  1. class Demo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 String s1 = "hello";//字符串要用双引号引起来
  6.                 String s2 = "hello";
  7.                 /*
  8.                 这是比较s1和s2是否指向同一个对象,因为字符串对象一旦被初始化就不能被改变,所以
  9.                 在内存中只有一个"abc"对象,s1和s2都指向它
  10.                 */
  11.                 if (s1 == s2)
  12.                         System.out.println("s1 == s2");
  13.                 else
  14.                         System.out.println("s1 != s2");
  15.                 /*
  16.                 如果比较字符内容是否相同的话就用equals方法了,
  17.                 String类中复写了Object类的equals方法,用于比较字符串内容是否相同
  18.                 */
  19.                 if (s1.equals(s2))
  20.                         System.out.println("s1和s2的内容相同");
  21.                 else
  22.                         System.out.println("s1和s2的内容不同!");
  23.         }
  24. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1 很给力!

查看全部评分

回复 使用道具 举报 1 1
String赋值时要加上“”,==对于引用型变量比较的是地址值
回复 使用道具 举报
学习了!
回复 使用道具 举报
你没加双引号啊,String的==是比较字符串存放的地址。应该用a.equals(b),
这才是比较字符串的内容。看到后面就知道了
回复 使用道具 举报
==是比较的地址 明显a和b指向的地址不同啊
回复 使用道具 举报
谢谢,我明白了
回复 使用道具 举报 1 0
丁绍然 发表于 2014-5-24 15:25
你没加双引号啊,String的==是比较字符串存放的地址。应该用a.equals(b),
这才是比较字符串的内容。看到 ...

谢谢,我只知道该怎么用了
回复 使用道具 举报
想飞的鱼 发表于 2014-5-24 08:26
首先说说==的用法,它属于比较运算符,结果是boolean类型的,如果是基本数据类型的话,比较的是==两边的值 ...

3q!!!!!!!!!!!
回复 使用道具 举报
“==”该运算符号是比较两个个对象的地址值是否相等。你比较的两个字符串类容是相同的,但他们适量个对象,在内存中的地址值是不可能相同的。
回复 使用道具 举报
比较的是数据在内存存放的位置
回复 使用道具 举报
你定义字符串要加双引号的亲!
回复 使用道具 举报
27ZJQ 来自手机 中级黑马 2014-5-29 15:57:46
17#
学习了!
回复 使用道具 举报
定义String 要加"",第二,java里面好像没有printf()的打印方法,这个是c语言的,你弄错了,system,out.println()才是对的
回复 使用道具 举报
String  a="hello" ;
String  b="hello";
这里的问题
回复 使用道具 举报
你的代码无法正确运行时因为你在定义字符串的时候没有加"".
“==”在引用变量中是用来比较两者的地址值是否相等
正确代码解析如下:
//第一次创建String类a对象hello,并将该对象存放在字符串常量池中
String  a="hello" ;
//当第二次出现同样的字符串时,直接引用第一次创建出来的字符串
String  b="hello";
//由于a,b都指向的是同一个字符串,因此a的地址值和b的地址值相等,执行if语句打印
if(a==b)
System.out.printf("a和b字符串相同");
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 加入黑马