03数组和字符串

数组的创建

方法一:

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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值