一.涉及到的概念
1.final修饰基本类型变量,代表这个变量不能再被改变,但是要是修饰引用类型的变量则,引用变量不能改变,但是引用所指向的对象是可以改变的。

2.final会固定栈中的引用变量的位置,但是堆中的对象因为一直由栈指针指向,所以final 的修饰作用对于引用变量所引用的对象没有什么与影响。

3.final修饰的类不能被继承,没有子类,final修饰的类中的方法默认是final的。

4.字符串常量存储在方法区中的常量池,如:“abc” , “杯子” 等, 常量具有唯一性。

二.String

1)第一种方法声明String类型的变量

String str1 = “abc”;

对于这种方法是在类加载器加载之后,常量池就有了"abc"这个常量,当执行到这一步的时候,这个常量"abc"的地址就会被赋值给str1,然后引用变量 str1直接指向常量池的的"abc"。

2)第二种方法声明String类型的变量 (需要创建对象)

String() 的括号内可以传 ,空值 ,字符串 ,数组等。
以下以传递数组为例来创建一个"abc"的字符串:

//先创建一个char类型的数组date用来储存 ‘a’ , ‘b’ , ‘c’ 这三个字符。
 char date[] = new char[];
 date[0] = “a”;
 date[1] = “b”;
 date[2] = “b”;//把date传入构造方法String中
 String str2 = new String(date);//在String的构造方法中进行的内容
 //引用类型的变量value被fianl修饰,表示value的内容不可变(value的内容是地址),但是value地址所指向的对象(数组的内容)可变。 (概念 1 2)
private final char[] value;//这个作用是把date数组中的内容复制到value数组中
 public String(char date[]) {
 this(date, 0, date.length, null);
 }

android String类型对比 string类型比较_android String类型对比

四.总结

1.我们用等号 “==” 比较 str1 和 str2的时候比较的是它们的地址,a0001 和 a002 是不可能想等的,但是用equals比较的时候比较的是地址所指向的内容 “abc” 和 “abc” 此时二者是相等的。

2.str2指向的是value的地址,由于value被final修饰所以str2的内容(value的地址),但是value数组的元素是可变的。