String数据类型变量的比较

一.涉及到的概念
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);
}

在这里插入图片描述

四.总结

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

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

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值