1. String s="abc";
s= s+"def";//主要是这里
System.out.println(s);
2. String str = new String("aaa");
System.out.println(str==str.substring(0,3));//结果是 true吧
为什么?给个理由
s= s+"def";//主要是这里
System.out.println(s);
2. String str = new String("aaa");
System.out.println(str==str.substring(0,3));//结果是 true吧
为什么?给个理由
解决方案 »
- 请大家帮忙解释一下这个程序为什么会这样?
- 请问大家引用的问题
- 我想自学java,请高手前辈给个学习方案,使我能少走弯路!!!ORZ
- 谁能综合的介绍一下Container 如set,List,map及其实现类
- java程序的非正常退出的处理
- VC中BYTE类型是0~255,而JAVA中byte范围是-128~127,JAVA传一个数250,该怎么办呢
- 有用过JB6的吗,指点一下好吗?
- 请大家帮个忙,介绍几本JAVA入门书
- 就没别的办法了?---关于applet,swing,IE
- 一个弹出菜单的问题!
- 关于JDOM解析XMl中的SAXBuilder 中的build方法的问题
- Date 类里面的getTime方法到底得到的是什么呢
System.out.println(str == "aaa".substring(0,3));
结果为false所以,很显然,==并不是在比较值。。
-----------------------------------------------------------------------在讲 == 和 equals 的区别前我们需要确认一下 Java 中的数据类型。在Java中有基本数据类型和引用数据类型两种。
1、8种基本数据类型:
四种整数类型(byte、short、int、long)
两种浮点数类型(float、double)
一种字符类型(char)
一种布尔类型(boolean)
2、引用数据类型:除了上面我们说的 8 种基本数据类型外,其他在Java中出现的类型都是引用数据类型。如我们自己写了一个Dog类,而在上面说的8种基本数据类型中不包括Dog类型,所以Dog类型是隶属于
引用数据类型的。==的理解:要理解 == 我们学要从两个方面来理解:(1) == 两边为 8 中基本数据类型时:
当 == 两边为8中基本数据类型时, == 判断的是两边变量中存放的内容是否相等。例:
public class Test { public static void main(String[] args) {
int a = 10;
int b = 10;
if (a == b) {
System.out.println("变量a和变量b中的值相等");
}
}}上面的例子的运行结果是在控制台中输出"变量a和变量b中的值相等" 我们可以看出当 == 两边为8种基本数据类型时比较的时内容换句话说就是比较变量的值。(2) == 两边为引用数据类型时:
当 == 两边为引用数据类型事,== 判断的是引用数据类型的对象的内存地址是否一样,如果 == 比较的内存地址一样表示 == 两边是同一个对象,否则 == 两边不是同一个对象。例:
public class Test { public static void main(String[] args) {
//在8中数据类型中没有String类型所以String是属于引用数据类型的
String str1 = new String("abc");
//在这里在创建一个str2对象让他的值和str1一样
String str2 = new String("abc");
//我们在用 == 来进行判断会发现 str1 == str2条件不成立我们可以看出这里比较的不是str1和str2的值
if (str1 == str2) {
System.out.println("对象str1和对象str2是同一对象,他们的内存地址相同");
} else {
System.out.println("对象str1和对象str2不是同一对象,他们的内存地址不相同");
}
}
}equals的理解:
equals的理解就容易多了,equals他是一个方法,而方法只有对象才能拥有,所以equals的左边一定是一个对象他的语法格式因该是:对象名.equals(比较的内容)。
例:public class Test { public static void main(String[] args) {
String str1 = new String("abc");
//equals的括号中可以直接写入要比较的内容
if (str1.equals("abc")) {
System.out.println("对象str1的内容和 abc 相同");
} String str2 = new String("abc");
//equals括号中也可以是一个要比较的对象,注意这里比较的是str1对象和str2对象的内容
if (str1.equals(str2)) {
System.out.println("对象str1的内容和 str2 的内容相同");
} }
}
------------------------------------------------------------------
JAVA为字符串提供了特别的连接操作符(+),可以把其它各种类型的数据类型转换成字符串,并前后连接成新在字符串。连接操作符(+)的功能是通过StringBuffer类和它的append方法实现的。
String x="a"+4+"c";编译时等效于String x=new StringBuffer.append.("a").append.(4).append("c").toString;
所以你的第一个问题连接成一个新的字符串sdef
----------------------------------------------------------------------------------
第二个问题:
==两边是引用类型,所以他们比较是内存地址查帮助文档可知:
public String substring(int beginIndex,
int endIndex)返回一个新字符串,它是此字符串的一个子字符串。该子字符串从指定的 beginIndex 处开始,一直到索引 endIndex - 1 处的字符。因此,该子字符串的长度为 endIndex-beginIndex。
示例: "hamburger".substring(4, 8) returns "urge"
"smiles".substring(1, 5) returns "mile"
参数:
beginIndex - 开始处的索引(包括)。
endIndex - 结束处的索引(不包括)。
返回:
指定的子字符串。 ---------------------
str.substring(0, 3)的结果是aaa,因为他们是同一个对象,str == str.substring(0, 3)结果是true
-------------------------------------------------------------------------------------------
如果改成这样
String str = new String("aaa");
String str1 = new String("aaa");
System.out.println(str == str1.substring(0, 3));// 结果是false,因为引用对象不同