Java论坛网»Java技术»关于判断是否为空格

关于判断是否为空格

问?:
我想判断一个jTextArea中是否有空格,采用jTextArea.getText().subString(i,i+1)==" ";的方法,但是无法正确判断哦。。即使是空格,这个方法也判断不出。。。。如果改成jTextArea.getText().subString(i,i+1).equals(" ");就成了。。。请问这个是为什么呢?

另外还想请问下,对于加了ActionListener的jComboBox,如何取得状态改变前的item的选项呢?用ItemEvent.ITEM_LAST好象不行哦。。
答!: 1:
这个...等于号和equals的区别。一般字符串比较的时候都用equals,equals可以判断内容是否相同,但是==号判断的是引用是否相同。
答!: 2:
你的后者方法是对的啊,空格就是那样子的
你也可以直接用空格的值来判断,空格的ASCII值为32
然后你只要把字符串里的字符一个一个比较就可以了,如果等于32,则为空格符
String content=JTextArea.getText();
for(int i=0;i<content.length();i++){
char c=content.charAt(i);
if(c==32){

System.out.println("第"+i+"个字符是空格");
}

}
答!: 3:
1. 首先String不属于8种基本数据类型,String是一个对象。

因为对象的默认值是null,所以String的默认值也是null;但它又是一种特殊的对象,有其它对象没有的一些特性。

2. new String()和new String(“”)都是申明一个新的空字符串,是空串不是null;

3. String str=”kvill”;

String str=new String (“kvill”);的区别:

在这里,我们不谈堆,也不谈栈,只先简单引入常量池这个简单的概念。

常量池(constant pool)指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。它包括了关于类、方法、接口等中的常量,也包括字符串常量。

看例1:

String s0=”kvill”;

String s1=”kvill”;

String s2=”kv” + “ill”;

System.out.println( s0==s1 );

System.out.println( s0==s2 );
结果为:

true

true

首先,我们要知结果为道Java会确保一个字符串常量只有一个拷贝。

因为例子中的s0和s1中的”kvill”都是字符串常量,它们在编译期就被确定了,所以s0==s1为true;而”kv”和”ill”也都是字符串常量,当一个字符串由多个字符串常量连接而成时,它自己肯定也是字符串常量,所以s2也同样在编译期就被解析为一个字符串常量,所以s2也是常量池中”kvill”的一个引用。

所以我们得出s0==s1==s2;

用new String() 创建的字符串不是常量,不能在编译期就确定,所以new String() 创建的字符串不放入常量池中,它们有自己的地址空间。

看例2:

String s0=”kvill”;

String s1=new String(”kvill”);

String s2=”kv” + new String(“ill”);

System.out.println( s0==s1 );

System.out.println( s0==s2 );

System.out.println( s1==s2 ); 结果为:

false

false

false
例2中s0还是常量池中”kvill”的应用,s1因为无法在编译期确定,所以是运行时创建的新对象”kvill”的引用,s2因为有后半部分new String(“ill”)所以也无法在编译期确定,所以也是一个新创建对象”kvill”的应用;明白了这些也就知道为何得出此结果了。


所以楼主,你的后者是正确的,原因就是这样的





至于 第二个问题

JComboBox可以引发ActionEvent和ItemEvent事件以及其他事件.选中一个新的选项时,JComboBox会产生两次ItemEvent事件,一次是取消前一个选项,另一次是选择当前选项.产生ItemEvent事件后JComboBox产生一个ActionEvent事件.要响应ItemEvent事件,需要实现处理方法itemStateChanged(ItemEvent e)来处理选择.
例如,从处理器itemStateChanged(ItemEvent e)中获取数据:
public void itemStateChanged(ItemEvent e)
{
// Make sure the source is a combo box
if (e.getSource() instanceof JComboBox)
String s = (String)e.getItem();
}

你可以判断
if(e.getStateChange()==e.DESELECTED)
{
System.out.println("ESELECTED: e.getItem()= "+e.getItem());
}
答!: 4:
当比较的对象是对象引用:"==" 不涉及对象内容的比较,而是对内容地址是否相等做比较。

如果要比较两对象的内容时候相等时,需使用equals
答!: 5:
太感谢楼上的弟兄姐妹了。。。受益非潜啊。。。

相关JAVA教程:
opensso
J2EE框架中多个WEB模块的授权问题
数据库无法加入信息
哪位能够告诉我tapestry的运行机制阿!!!!!
struts的路径问题,高手帮忙
我想把一个ImageIcon的对象保存成图片文件!
hibernate对象查询工具的问题。在线等答案??
请教!tomcat4.1的服务在启动后5秒左右,自动关闭。是怎么回事?怎么解决?
weblogic连接池怪异问题
高手请进~~急 ~在线等~
请教一个关于jDialog的问题(模态)
Swing编程,如何实现窗体的打开和关闭!