乐趣区

关于java:Java程序设计05String基本数据类型和集合

String, 根本数据类型和汇合


一.String 和 Stringbuffer 类
1.String 的申明
string s1="abc";

string s2 = new String("abc");
2.String 内容的比拟

在 String 中,比拟两个字符串是否雷同,不能应用 ==,应应用 equals()办法。

1.“==”办法:比拟的是变量 (栈) 内存中寄存的对象的 (堆) 内存地址,用来判断两个对象的地址是否雷同

String str1 = "zjd";// 间接赋值
String str2 = new String ("zjd");// 通过 new 赋值
String str3 = str2;
System.out.println("str1 == str2-->"+(str1 == str2));
System.out.println("str1 == str3-->"+(str1 == str3));
System.out.println("str2 == str3-->"+(str2 == str3));

起因:

  1. 每一个 String 对象的内存存储其实都是在堆内存中。
  2. “==” 是进行数值比拟的,因为 str1 和 str2 的在堆内存的地址不一样所以:str1 和 str2 不相等–>false

2.“equals()” 办法:比拟的是两个对象的内容是否相等

String str1 = "zjd";// 间接赋值
String str2 = new String ("zjd");// 通过 new 赋值
String str3 = str2;
System.out.println("str1 equals str2-->"+(str1.equals(str2)));
System.out.println("str1 equals str3-->"+(str1.equals(str3)));
System.out.println("str2 equals str3-->"+(str2.equals(str3)));

起因:因为 equals()办法的作用是将内容进行比拟,所以此处返回的后果都为 true。

3. 两种实例化对象的区别

一个字符串就是一个 String 类中的匿名对象,匿名对象就是曾经开拓了堆内存空间能够间接应用的对象。

1. 间接赋值

String str1 = "zjd";// 间接赋值
String str2 = "zjd";
String str3 = "zjd";
System.out.println("str1 == str2-->"+(str1 == str2));
System.out.println("str1 == str3-->"+(str1 == str3));
System.out.println("str2 == str3-->"+(str2 == str3);

起因:实际上就是把一个在堆内存中开拓好的空间使用权给 str1,并且如果一个字符串曾经被一个名称所援用,则当前再有雷同的名称的字符串申明时,就不会从新开拓新地址了

2. 通过 new 的形式实例化

String str1 = new String("zjd");

4. 一旦被初始化,字符串内容便不能够被扭转
String str1 = "zjd";
str1 =str1+"zka";
System.out.println(str1);

后果:zjdzka

退出移动版