数组与String

java的数组和String

1.hashCode

Object中的方法
public native int hashCode();
	带有native关键字的方法调用的是底层C++的dll文件
    这种方法我们在工具中看不到具体的实现,当然也可以去其他地方找相关的实现代码。
    hashCode()它是一个对象在堆中的内存地址经过hash算法计算之后又进行了进制的转换得出的结果.返回值是int
    问题:如果两个对象的hashCode()值一样,说明什么问题?是同一个对象
    hashCode()方法有什么用?
        因为hashCode()方法计算的对象是内存地址,内存地址对于一个对象来讲是惟一的,所以hashCode()算法算出来的也是唯一值。因此这个方法可以判断:
        1. 一个对象是否存在。
        2. 一个对象与另一个对象是否是同一个对象。
        3. 两个对象的hashCode值比较的话,就相当于引用之间使用"==",只能比较地址,不能比较值。

public class Main{
    public static void main(String[] args){
        Main a1 = new Main();
        Main a2 = a1;
        System.out.println(a1.hashCode());
        System.out.println(a2.hashCode());
    }
}
460141958
460141958

2.数组

是一种引用数据类型
基础数据类型:byte short int long float double boolean char
除去这8种之外,全是引用类型

//什么是引用类型? 类型 变量名,这个变量名指向的是一块内存空间,我们说它就是引用类型。
//A a = 内存地址; 这种形式就是引用类型。java当中,只有两种类型,基础数据类型和引用类型
//引用类型所指向的内存地址实际是对象(常量、static修饰的变量)的内存地址。

特点:

  • 每个数组元素的数据类型都是相同的,在数组声明时定义
  • 内存中数组的各个元素都是连续有序的
  • 所有元素共用一个数组名,利用数组名和下表唯一的确定数组中各个元素的位置

数组需要经过声明、分配内存和赋值后才能被使用

声明:declare 在java中只能声明一个变量,也就是说没有给这个变量赋初始值。
定义:define 在java中,定义一个变量,就是给变量赋值的过程

   // 在java中,基础数据类型都是传值
   // 引用数据都是传引用(这里的传:实参和形参之间的传递方式,方法的返回值返回的方式)
   // java做好了封装,引用类型都是传递的都是引用。返回值类型也都是引用,没有返回过值。

2.1创建数组

数组被创建以后,每个数组元素都将获得与定义的数据类型相应大小的内存,同时自动用数据类型的默认值初始化所有的数组元素

  • 整型:0
  • 实型:0.0f 或 0.0D
  • 字符型:’ \0 ’
  • 类对象:null

创建数组后,数组的大小是无法改变的,如果想要数组扩容,那就只能用一个更大的数组去装

2. 2数组的类型

基础数据类型的数组:int[] a;这意味着,a所指向的数组中保存的是int类型的数据
引用类型的数组:Person[] p;这意味着,p所指向的数组中保存的是Person类型的对象的引用

2.3两种初始化方式的差别

  • 静态初始化是在已知数组元素值的时候,可以直接静态初始化。
  • 静态初始的时候,实际上是根据{}中的值的个数来分配了数组的内存空间
  • 动态初始化的时候,实际上是根据new int[初始化大小]中的初始化大小的值来分配内存空间
  • 动态初始化是指,后续可以给数组中的元素进行赋值。
  • 如果是静态初始化,一开始初始化的时候在{}中没有给值,如果在后续赋值,会抛出Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 0。数组索引越界异常。为什么?因为静态初始化的时候,JVM会根据{}中的值的个数在堆中给数组分配大小。
  • 这也说明一个问题,一旦数组的大小被确定之后,是不能改变的。
        int[] a = new int[3];
        a[3]=100;
        //Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException
        int[] arr = {};
        arr[0] = 1;
        //Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException:
  • 数组一旦被创建,其大小就固定了,无论静态的还是动态的。大小是固定的。数组的大小是不可以被改变的。也就是说length值已经被确立了。我们可以想象,这个length属性一定被final修饰。

写几道题练练手
1.判断是否为回文

public class Main{
    public static void main(String[] args) {
        Scanner str = new Scanner(System.in);
        String s = str.nextLine();
        if(judge(s))
            System.out.println("Yes");
        else
            System.out.println("No");
    }
    public static boolean judge (String s){
        int i = 0;
        char[] charArray = s.toCharArray();
        while (i < s.length()/2){
            if(charArray[i]!=charArray[s.length()-i-1])
                return false;
            i++;
        }
        return true;
    }
}

用一个布尔类型的方法来判断是否为回文
运用了toCharArray()方法将字符串转化为字符数组

2.冒泡排序法

public class Main{
    public static void main(String[] args) {
        Scanner str = new Scanner(System.in);
        int n = str.nextInt();
        int x[] = new int[n];
        for(int i=0;i<n;i++) {
            x[i] = str.nextInt();
        }
        for(int i = 0;i<n;i++)
            for(int j=0;j<n-i-1;j++)
            {
                if(x[j]>x[j+1])
                {
                    int t = x[j];
                    x[j] = x[j+1];
                    x[j+1] = t;
                }
            }
        for(int i =0;i<n;i++)
            System.out.println(x[i]);
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值