字符串就是String类的对象;
字符串的创建方式 :
1.字面量赋值(直接赋值 比较常用)<br /> String str = "字符串内容"; <br /> 2.new对象赋值 <br /> String str = new String("字符串里面的内容") //每new一个就新开辟一个空间<br /> 两种方式的区别:<br /> new对象赋值时 每new一次就会创建一个新的字符串对象//每new一个新开辟一个空间<br /> 直接赋值 涉及到共享设计模式 <br /> 讲共享设计模式之前 先理解"=="比较是否可以用于对象类型比较<br /> <br /> 之前我们使用"=="比较基本数据类型 相等为True 不相等则false<br /> 但是通过两个Person对象发现 无论属性值是否相等都返回false<br /><br /> 因为"=="是比较 变量栈内存中的值;<br /> 基本数据类型 栈内存存储的变量的值 可以比较<br /> 但是对象在栈内存中存储的是地址<br /> 如果地址不一样 那么"=="比较返回的就是false<br /> 不管堆内存中的属性值是否一样<br /> 所以"=="不适用于对象比较是否平等<br />
字符串的共享设计模式 :
如果字符串都是使用new对象创建出来的<br /> 那么每new一次 都会开辟一个独立空间<br /> 相互之间 就算是字符串内容一样<br /> "=="比较也会返回false 因为地址不一样<br /><br /> 如果字符串同为直接赋值的情况下;<br /> 系统考虑到 字符串内容都是固定的<br /> 多个字符串如果内容一样 反复开辟空间<br /> 太过于浪费<br /> 所以如果字符串是直接赋值 那么第一个直接赋值的字符串<br /> 会开辟一个空间 第二个如果和前面直接赋值的字符串内容一样<br /> 则不在单独开辟空间 而是直接把地址共享 为了节省内存<br /> 一但地址共享 那么"=="比较就会返回true 因为地址相同<br />图解 :<br /><br />那么字符串比较 使用"=="可以嘛?<br /> 不可以!!!!!!
符串官方提供了一个方法 专门比较堆内存中 字符串的值是否相等的方法:
字符串.equals(其他字符串) 返回true表示相等
不管new对象赋值还是 直接赋值 都能比较出来是否相等
实际开发 字符串比较使用 equals方法