Java语言的特点和八大基本类型

文章介绍了Java语言的基本特点,如面向对象、平台无关性,并详细阐述了基本数据类型,包括byte、short、int、long、float、double、boolean和char,以及它们的封装类。还讨论了int与Integer的区别,以及多线程支持。文章末尾提供了一个关于二分查找算法的编程题,解释了如何找到丢失的数字。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

“byte和short两兄弟去找int问long去哪了”

“int摇摇头说不知道”

“此时float和double两兄弟也来凑热闹”

“共同商议后决定去找char询问”

“char面对五人的询问只好说boolean知道”

“六人来到boolean的住处发现long竟然在玩猜真假游戏”
在这里插入图片描述

Java语言的特点

1.简单易学。Java有丰富的类库,能够通过静态方法封装,降低API的学习成本,提高工作效率。

2.面向对象。这个也是Java最重要的特性,java能够使得程序耦合度更低,内聚性更高。

3.可靠安全。Java生态系统包括用于分析和报告安全性问题的各种工具。

4.与平台无关。Java能够跨平台使用。

5.支持多线程。Java可以采用多线程+协程方式实现更多的并发操作。

八大基本数据类型

基本类型大小(字节)默认值封装类
byte1(byte)0Byte
short2(short)0Short
int40Integer
long80LLong
float40.0fFloat
double8o.odDouble
boolean-falseBoolean
char2\u0000(null)Character

封装类注意事项

1.int与Integer的区别

int是基本数据类型,Integer是引用类型。

int的默认值为0,Integer的默认值为null。因此Integer能区分0和null。

一旦java看到null,就知道这个引用还没有指向某个对象,在任何引用使用前,必须为其指定一个对象,否则会报错(空指针异常)

2.分配空间的区别

基本数据类型在声明时系统会自动分配空间

引用类型声明时只是分配了引用空间,必须通过实例化开辟数据空间之后才可以赋值。

数组对象也是一个引用对象,将一个数组赋值给另一个数组时只是复制了一个引用,所以通过某一个数组所做的修改在另一个数组中也看得见

3.boolean类型的特殊之处

虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在java虚拟机中没有任何供boolean值专用的字节码指令,java语言表达式所操作的boolean值,在编译之后都使用虚拟机中的int数据类型来代替,而boolean数组将会被编译成java虚拟机的byte数组,每个元素boolean元素占8位。这样我们就可以得出在单独使用时boolean类型占了4个字节,在数组中又是1个字节。使用int的原因是,对于当下32位的处理器(CPU)来说,一次处理数据是32位(这里不是指32/64位系统,而是指CPU硬件层面),具有高效存取的特点。

在这里插入图片描述

二分查找

题目:丢失的数字
难度:🌟
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/missing-number

给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。

输入:nums = [3,0,1]
输出:2
解释:n = 3,因为有 3 个数字,所以所有的数字都在范围 [0,3] 内。2 是丢失的数字,因为它没有出现在 nums 中。

输入:nums = [0,1]
输出:2
解释:n = 2,因为有 2 个数字,所以所有的数字都在范围 [0,2] 内。2 是丢失的数字,因为它没有出现在 nums 中。

输入:nums = [9,6,4,2,3,5,7,0,1]
输出:8
解释:n = 9,因为有 9 个数字,所以所有的数字都在范围 [0,9] 内。8 是丢失的数字,因为它没有出现在 nums 中。

输入:nums = [0]
输出:1
解释:n = 1,因为有 1 个数字,所以所有的数字都在范围 [0,1] 内。1 是丢失的数字,因为它没有出现在 nums 中。

提示:

n == nums.length
1 <= n <= 104
0 <= nums[i] <= n
nums 中的所有数字都 独一无二

请先思考!!!!

|||||||||||

|||||||||||

|||||||||||

|||||||||||

|||||||||||

|||||||||||

|||||||||||

答答答答答答答答答答答

案案案案案案案案案案案

往往往往往往往往往往往

下下下下下下下下下下下

翻翻翻翻翻翻翻翻翻翻翻

|||||||||||

|||||||||||

|||||||||||

|||||||||||

|||||||||||

|||||||||||

|||||||||||

class Solution {
    public int missingNumber(int[] nums) {
        // 先对数组进行排序
        Arrays.sort(nums);
      	// 考虑到可能是最后一个数字丢失的情况
        int target = nums.length;
        for(int i = 0 ; i < nums.length ; i++){
          	// 这样就包含了第一个数字丢失的情况
            if(nums[i] != i){
                return i;
            }
        }
        return target;
    }
}

题解:

首先将数组进行排序,定义target等于数组的长度,然后循环数组,如果下标所对应的值不等于下标,则就是丢失的数字,此时target就是为了防止丢失的最后一个数字这种情况的出现

class Solution {
    public int missingNumber(int[] nums) {
        int sum = 0;
        // 首先计算nums中所有数字的和
        for(int i : nums){
            sum += i;
        }
        // 求出从1到n的数字之和
        int countSum = (nums.length * (nums.length+1)) >> 1;
        return countSum - sum;

    }
}

题解:

利用了高斯求和公式,如下

高斯求和公式
求出1到n的数值之和减去数组里的数值之和就是我们要好的丢失的数字

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值