为什么字符串String是不可变字符串&&"".equals(str)与str.equals("")的区别
为什么字符串String是不可变字符串
实际上String类的实现是char类型的数组
虽然说源码中设置的是private final char[] value;
final关键词表示不可变动
但是只是不能直接在value这个数组的引用地址入手
还是可以在数组value中进行更改
像是value[2] = 1;
但是设计者巧妙地避开了这个坑
还把数组设为final
public static void main(String[] args) {
  final char[] value = {1,2,3,4};
  char[] v = new char[4];
  value = v;
}
public static void main(String[] args) {
    final char[] value = {1,2,3,4};
    value[2] = 6;
    System.out.println(value);
}
虽然字符串本身不能改
但是可以改字符串变量指向另一个字符串的地址
而且字符串是有一个共享的字符串常量池(这里等我读《深入Java虚拟机》之后再填坑)
所以如果复制一个字符串变量
原始字符串与复制的字符串共享相同的字符
其实也是因为java的特性之一------没有可以直接改变内存变量的指针
"".equals(str)与str.equals("")的区别
"".equals(str)这种写法可以规避系统报空指针异常错误
 class Solution {
   private static String a;
   public static void main(String[] args) {
     if("".equals(a))
       System.out.println("''.equals(a)");
     if(a.equals(""))
7       System.out.println("a.equals('')");
   }
 }
为什么字符串String是不可变字符串&&"".equals(str)与str.equals("")的区别的更多相关文章
- Python_字符串的映射与可变字符串的应用
		
''' maketrans().translate() maketrans()方法用来生成字符映射表,而translate()方法则按映射表中定义的对应关系转换并替换其中的字符,使用这两个方法的组合可 ...
 - Java 中的字符串(String)与C# 中字符串(string)的异同
		
1. C# 中比较两个字符串字面量是否相等,可以使用 “==”比较运算符,是因为string 类型重写(override)了“==” 和 “!=” 运算符,在使用“==” 和 “!=” 进行字符串比较 ...
 - [转]标准C++字符串string以及MFC6.0字符串CString的tokenize和split函数
		
标准字符串的方法: /******************************************** the tokenize function for std::string ****** ...
 - lua中 string.find(查找获取字符串) string.gsub(查找替换字符串) string.sub(截取字符串)
		
> aaa='/p/v2/api/winapi/adapter/lgj'> print(string.find(aaa, "^/.+/adapter/(.*)"))1 ...
 - Java基础——数组应用之字符串String类
		
字符串String的使用 Java字符串就是Unicode字符序列,例如串“Java”就是4个Unicode字符J,a,v,a组成的. Java中没有内置的字符串类型,而是在标准Java类库中提供了一 ...
 - 自定义实现字符串string的接口
		
用char*管理String类的内存,new动态分配,在析构函数中delete char*指向的new出来的内存,一个string类需要实现那些接口可参考标准库里的string: http://ww ...
 - 不可变字符串String与可变字符串StringBuilder、StringBuffer使用详解
		
String字符串 char类型只能表示一个字符,而String可以表示字符串,也就是一个字符序列.但String不是基本类型,而是一个定义好的类,是一个引用类型.在Java中,可以将字符串直接量赋给 ...
 - Java中String被称为不可变字符串的原因
		
很多东西,看似可变,实际上不过是是新桃换旧符罢了. 代码: /** * String之所以被称为不可变字符串 */ static void testString(){ String str = &qu ...
 - Java之字符串String,StringBuffer,StringBuilder
		
String类: String类即字符串类型,并不是Java的基本数据类型,但可以像基本数据类型一样使用,用双引号括起来进行声明.在Java中用String类的构造方法来创建字符串变量. 声明字符串: ...
 
随机推荐
- 1.7-1.12 MapReduce Wordflow
			
一.案例运行MapReduce Wordflow 1.准备examples [root@hadoop-senior oozie-4.0.0-cdh5.3.6]# pwd /opt/cdh-5.3.6/ ...
 - 面试6-----11 const和静态变量那些事儿
			
6 看看const和指针的那些事儿 const在int*左边 const在int*右边 const在int*两边------>请看代码注释 (1)代码 #include <stdio.h& ...
 - Flutter实战视频-移动电商-52.购物车_数据模型建立和Provide修改
			
52.购物车_数据模型建立和Provide修改 根据json数据生成模型类 {,"price":830.0,"images":"http://imag ...
 - POJ - 2376 Cleaning Shifts 贪心(最小区间覆盖)
			
Cleaning Shifts Farmer John is assigning some of his N (1 <= N <= 25,000) cows to do some clea ...
 - JAVA列出某文件夹下的所有文件
			
import java.io.*; public class ListFiles { private static String s = ""; private static Bu ...
 - __contains__, __len__,__reversed__
			
__contains__():当使用in,not in 对象的时候 调用(not in 是在in完成后再取反,实际上还是in操作) class A(object): def __init__(self ...
 - Python开发 第01课 Python 简介
			
一.Python 介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为AB ...
 - Java EE学习笔记(二)
			
Spring中的Bean 1.Bean的配置: a).Bean的本质就是Java中的类,而Spring中的Bean其实就是对实体类的引用,来生产Java类对象,从而实现生产和管理Bean . b).S ...
 - 转 php include
			
http://www.w3school.com.cn/php/php_includes.asp PHP include 实例 例子 1 假设我们有一个名为 "footer.php" ...
 - 18113 Secret Book of Kungfu           按位DFS
			
http://acm.scau.edu.cn:8000/uoj/mainMenu.html 18113 Secret Book of Kungfu 该题有题解 时间限制:1000MS 内存限制:65 ...