数组的创建
方法一:
package cn.xu.arrays;
import java.util.Arrays;
public class Example2 {
public static void main(String[] args) {
int[] ns;
ns = new int[5];
System.out.println(ns[0]);
}
}
方法二:
初始化并且赋值,把[]的数字去掉,让编译器计算有多少个值,new可以省略掉编译器会给我们加上,这是一种语法糖。
package cn.xu.arrays;
import java.util.Arrays;
public class Example2 {
public static void main(String[] args) {
int[] a = {1,2,3,4,5,6};
// int[] a = new int[] {1,2,3,4,5,6};
System.out.println(a[0]);
}
}
数组的遍历
第一种:用for循环遍历
package cn.xu.arrays;
import java.util.Arrays;
public class Example2 {
public static void main(String[] args) {
int[] a = new int[] {1,2,3,4,5,6};
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
}
}
}
第二种:类似迭代器
package cn.xu.arrays;
import java.util.Arrays;
public class Example2 {
public static void main(String[] args) {
int[] a = new int[] {1,2,3,4,5,6};
for (int n : a){
System.out.println(n);
}
}
}
数组的拷贝
修改了ns1也就修改了ns
public class Example2 {
public static void main(String[] args) {
int[] ns = {1, 2, 3, 4, 5};
int[] ns1 = ns;
ns1[1] = 100;
System.out.println(Arrays.toString(ns));
}
}
内置方法
Arrays.toString
Arrays.sort
package cn.xu.arrays;
import java.util.Arrays;
public class Example2 {
public static void main(String[] args) {
int[] ns = {1, 2, 3, 4, 5};
int[] ns1 = ns;
ns1[1] = 100;
System.out.println(Arrays.toString(ns));
Arrays.sort(ns);
System.out.println(Arrays.toString(ns));
}
}
[1, 100, 3, 4, 5]
[1, 3, 4, 5, 100]
多维数组
package cn.xu.arrays;
import java.util.Arrays;
public class Example2 {
public static void main(String[] args) {
int[][] ns = {
{1, 2, 3},
{1, 5, 3},
{1, 6, 3},
{4, 5, 6},
};
System.out.println(Arrays.toString(ns));
}
}
[[I@776ec8df, [I@4eec7777, [I@3b07d329, [I@41629346]
多维数组的创建是这样的:每次申请新建一个新建一维数组,这个数组有四个元素。然后二维数组对一维数组引用。
所以如何遍历二维数组?
有二维数组的组织管理机制可以想到,里面二维数组的长度可以不同。
package cn.xu.arrays;
import java.util.Arrays;
public class Example2 {
public static void main(String[] args) {
int[][] ns = {
{1, 2, 3},
{1, 5, 3},
{1, 6, 3},
{4, 5, 6},
};
for (int[] arr : ns)
System.out.println(Arrays.toString(arr));
int[] arr = ns[2];
System.out.println(Arrays.toString(arr));
}
}
[1, 2, 3]
[1, 5, 3]
[1, 6, 3]
[4, 5, 6]
[1, 6, 3]
字符串
构造方法
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html
方法一:
当前包含在字符数组参数中的字符序列。
package cn.xu.string;
public class Example1 {
public static void main(String[] args) {
char c = '\u4e2d';
System.out.println(c);
String s1 = new String(new char[] {'a', 'b', 'c', 'd'});
System.out.println(s1);
}
}
package cn.xu.string;
public class Example1 {
public static void main(String[] args) {
char c = '\u4e2d';
System.out.println(c);
String s1 = "abc中文";
System.out.println(s1);
}
}
按照byte存储
#字符串中字符的访问
如果想取得“中”字要怎么办?
原始数据中把字符藏起来了,想访问得使用对象的实例方法
package cn.xu.string;
public class Example1 {
public static void main(String[] args) {
char c = '\u4e2d';
System.out.println(c);
String s1 = "abc中文";
System.out.println(s1);
System.out.println(s1.charAt(3));
}
}
中
abc中文
中
equal
package cn.xu.string;
public class Example1 {
public static void main(String[] args) {
String s1 = "abc中文";
String s2 = s1;
System.out.println(s1 == s2);
}
}
True
package cn.xu.string;
public class Example1 {
public static void main(String[] args) {
String s1 = "abc中文";
String s2 = new String(s1);
System.out.println(s1 == s2);
}
}
很显然s1和s2引用的不是同一个对象,所以结果是False
为了判断s1和s2的值是否相同可以使用equal方法
package cn.xu.string;
public class Example1 {
public static void main(String[] args) {
String s1 = "abc中文";
String s2 = new String(s1);
System.out.println(s1.equals(s2));
}
}
True
java内存管理机制
package cn.xu.string;
public class Example1 {
public static void main(String[] args) {
int a1 = 3;
int a2 = 3;
System.out.println(a1 == a2);
}
}
如果检查到内存中有一个3则会让a2也指向a1指向的3,结果输出为True
package cn.xu.string;
public class Example1 {
public static void main(String[] args) {
int a1 = 3;
int a2 = 3;
System.out.println(a1 == a2);
}
}
package cn.xu.string;
public class Example1 {
public static void main(String[] args) {
String s1 = "abc";
String s2 = "abc";
System.out.println(s1 == s2);
}
}
字符一旦创建就成为不可改对象
package cn.xu.string;
public class Example1 {
public static void main(String[] args) {
String s1 = "abc";
s1 = "bcd";
System.out.println(s1);
}
}
null表示没有引用任何对象
package cn.xu.string;
public class Example1 {
public static void main(String[] args) {
String s1 = null;
String s2 = "";
System.out.println(s2.equals("abc"));
System.out.println(s1.equals("abc"));
}
}
false
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "s1" is null
at cn.xu.string.Example1.main(Example1.java:8)