首页
友情链接
精美壁纸
给我留言
更多
关于我
Search
1
uniapp Click点击事件冲突解决
4,558 阅读
2
【插件】UNI APP 实现商米打印机功能支持T1,T2,V2机型
3,871 阅读
3
【测试可用】个人码免签支付系统源码/免签支付系统/微信支付平台
1,974 阅读
4
Java Validation参数校验注解使用
1,230 阅读
5
windows10下docker:给已存在的容器添加端口映射的方法
1,219 阅读
Java
Spring Boot
Spring Mvc
Java基础
进阶知识
前端
uniapp
小程序/公众号
JavaScript
HTML/CSS
Vue
PHP
开源软件
商城
营销工具
开发工具
视频/教程
Discuz主题/插件
typecho主题/插件
SEO杂谈
数据库
MongoDB
MySQL
Redis
单片机
概念说明
电路相关
Python
devops
docker
k8s
linux
职场杂谈
登录
/
注册
Search
标签搜索
python
mysql
人人商城
php
java
docker
typecho
插件
微擎
seo
spring boot
discuz
队列
uni-app
phpcms
教程视频
开源系统
源码
工具
css
哈根达斯
累计撰写
100
篇文章
累计收到
154
条评论
首页
栏目
Java
Spring Boot
Spring Mvc
Java基础
进阶知识
前端
uniapp
小程序/公众号
JavaScript
HTML/CSS
Vue
PHP
开源软件
商城
营销工具
开发工具
视频/教程
Discuz主题/插件
typecho主题/插件
SEO杂谈
数据库
MongoDB
MySQL
Redis
单片机
概念说明
电路相关
Python
devops
docker
k8s
linux
职场杂谈
页面
友情链接
精美壁纸
给我留言
关于我
搜索到
100
篇与
哈根达斯
的结果
2023-01-31
并发编程-Java jdk中队列Queue的详解与应用
一、什么是队列,队列有什么用?假设春运火车站只有一个售票窗口,但是买火车票的人非常多,如果大家一哄而上到窗口进行买票,估计售票员会发疯,因此聪明的人类发明了排队这种游戏规则,则先到先得的机制,在不断的发展过程中,排队的规则也慢慢完善,比如有些例外比如军人优先或者老弱病残优先则可以进行插队,通过这样的规则可以让面对人流高峰也可以平稳进行工作。这个规则运用到实际开发中也是如此,在程序中队列是一种特殊的线性表,遵循先入先出、后入后出的基本原则,一般来说,它只允许在队列的前端进行删除操作,而在队列的后端进行插入操作。但是java的某些队列运行在任何地方插入删除(如军人插队)在java中根据队列特性,队列可分为阻塞队列和非阻塞队列,有界队列和无界队列、单向链表队列和双向链表队列之分,二、阻塞/非阻塞队列2.1 阻塞队列入列(添加元素)时,如果元素数量超过队列总数,会进行等待(阻塞),待队列的中的元素出列后,元素数量未超过队列总数时,就会解除阻塞状态,进而可以继续入列;出列(删除元素)时,如果队列为空的情况下,也会进行等待(阻塞),待队列有值的时候即会解除阻塞状态,进而继续出列;阻塞队列优点 :阻塞队列的好处是可以防止队列容器溢出;只要满了就会进行阻塞等待;也就不存在溢出的情况,只要是阻塞队列,都是线程安全的;实现类DelayQueue:一个支持延时获取元素的无界阻塞队列LinkedTransferQueue:一个由链表结构组成的无界阻塞队列。ArrayBlockingQueue:有界队列,阻塞式,初始化时必须指定队列大小,且不可改变;,底层由数组实现;SynchronousQueue:最多只能存储一个元素,每一个put操作必须等待一个take操作,否则不能继续添加元素PriorityBlockingQueue:一个带优先级的队列,而不是先进先出队列。元素按优先级顺序被移除,而且它也是无界的,也就是没有容量上限,虽然此队列逻辑上是无界的,但是由于资源被耗尽,所以试图执行添加操作可能会导致 OutOfMemoryError 错误;2.2 非阻塞队列不管出列还是入列,都不会进行阻塞,入列时,如果元素数量超过队列总数,则会抛出异常,出列时,如果队列为空,则取出空值;一般情况下,非阻塞式队列使用的比较少,一般都用阻塞式的对象比较多;阻塞和非阻塞队列在使用上的最大区别就是阻塞队列提供了以下2个方法:出队阻塞方法 : take()入队阻塞方法 : put()实现类ConcurrentLinkedQueue:单向链表结构的无界并发队列, 非阻塞队列,由CAS实现线程安全,内部基于节点实现ConcurrentLinkedDeque:双向链表结构的无界并发队列, 非阻塞队列,由CAS实现线程安全PriorityQueue: 内部基于数组实现,线程不安全的队列三、有界/无界队列有界和无界有界:有界限,大小长度受限制无界:无限大小,其实说是无限大小,其实是有界限的,只不过超过界限时就会进行扩容,就想ArrayList 一样,在内部动态扩容,最大值为Integer.MAX_VALUE四、单向/双向链表队列4.1 单向链表每个元素中除了元素本身之外,还存储一个指针,这个指针指向下一个元素;4.2 双向链表除了元素本身之外,还有两个指针,一个指针指向前一个元素的地址,另一个指针指向后一个元素的地址;四、 Java中队列的继承关系五、队列常用方法队列常用方法函数名函数介绍特殊说明add增加一个元索如果队列已满,则抛出一个IIIegaISlabEepeplian异常remove移除并返回队列头部的元素如果队列为空,则抛出一个NoSuchElementException异常element返回队列头部的元素如果队列为空,则抛出一个NoSuchElementException异常offer添加一个元素并返回true如果队列已满,则返回falsepoll移除并返问队列头部的元素如果队列为空,则返回nullpeek返回队列头部的元素如果队列为空,则返回nullput添加一个元素如果队列满,则阻塞take移除并返回队列头部的元素如果队列为空,则阻塞drainTo一次性取出队列所有元素)-PS知识点: remove、element、offer 、poll、peek 属于Queue接口的定义。六、代码示例假设现在需要售卖一趟车票共100张,并且有3个窗口开放售票,当有大量人购买时如何保障出票安全,我们使用ArrayBlockingQueue阻塞式有界队列来模拟常见代码。package com.queue; import cn.hutool.core.util.StrUtil; import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicInteger; public class BlockingQueueTest { //售票员窗口 static final int SALESPERSON=3; //总票数100张 static AtomicInteger ticketTotal=new AtomicInteger(100); //假设大厅总排队人数最大可排1000人 static final int MAX_COUNT=1000; public static void main(String[] args) { // 阻塞-有界队列 BlockingQueue<String> queue=new ArrayBlockingQueue<String>(MAX_COUNT); for (int i = 0; i < SALESPERSON; i++) { //模拟启动三个工作窗口工作排队 new Thread(new Producer(queue)).start(); //模拟启动三个工作窗口出票 new Thread(new Consumer(queue)).start(); } } /** * 模拟系统排队出票 */ static class Consumer extends Thread{ BlockingQueue<String> queue; public Consumer(BlockingQueue<String> queue) { this.queue = queue; } @Override public void run() { while (true){ try { if(ticketTotal.get()==0){ System.out.println("结束售票啦,收工下班"); return; } System.out.println(StrUtil.format("{},出票号:{},大厅排队总人数:{}",queue.take(),ticketTotal.getAndDecrement(),queue.size())); } catch (InterruptedException e) { e.printStackTrace(); } } } } /** * 模拟窗口并发出票发起请求 */ static class Producer implements Runnable{ BlockingQueue<String> queue; public Producer(BlockingQueue<String> queue) { this.queue = queue; } @Override public void run() { while (true){ try { queue.put(StrUtil.format("出票窗口{}号,购票请求:{}",Thread.currentThread().getId(),ticketTotal.get())); } catch (InterruptedException e) { e.printStackTrace(); } } } } } 通过上述代码运行,我看可以看出,当26,23,20同时请求同一个100票号时,系统也可以再多线程下正常出票,有效解决并发和出错票等问题出票窗口26号,购票请求:100,出票号:100,大厅排队总人数:7 出票窗口23号,购票请求:100,出票号:98,大厅排队总人数:6 出票窗口23号,购票请求:100,出票号:97,大厅排队总人数:217 出票窗口20号,购票请求:100,出票号:99,大厅排队总人数:8 出票窗口23号,购票请求:100,出票号:96,大厅排队总人数:226 出票窗口23号,购票请求:100,出票号:94,大厅排队总人数:237 出票窗口20号,购票请求:100,出票号:95,大厅排队总人数:227 出票窗口26号,购票请求:100,出票号:92,大厅排队总人数:264 出票窗口20号,购票请求:100,出票号:93,大厅排队总人数:246 出票窗口20号,购票请求:100,出票号:90,大厅排队总人数:274 出票窗口23号,购票请求:100,出票号:91,大厅排队总人数:267 出票窗口20号,购票请求:97,出票号:88,大厅排队总人数:292 出票窗口20号,购票请求:97,出票号:89,大厅排队总人数:284 出票窗口20号,购票请求:97,出票号:86,大厅排队总人数:327 出票窗口26号,购票请求:98,出票号:87,大厅排队总人数:298 出票窗口23号,购票请求:97,出票号:85,大厅排队总人数:341 出票窗口20号,购票请求:97,出票号:83,大厅排队总人数:339 出票窗口20号,购票请求:97,出票号:84,大厅排队总人数:340 出票窗口26号,购票请求:97,出票号:81,大厅排队总人数:352 出票窗口23号,购票请求:97,出票号:82,大厅排队总人数:345 出票窗口23号,购票请求:97,出票号:79,大厅排队总人数:362 出票窗口20号,购票请求:97,出票号:80,大厅排队总人数:360 出票窗口20号,购票请求:97,出票号:77,大厅排队总人数:366 出票窗口26号,购票请求:97,出票号:78,大厅排队总人数:366 出票窗口26号,购票请求:97,出票号:75,大厅排队总人数:380 出票窗口20号,购票请求:97,出票号:76,大厅排队总人数:370 出票窗口20号,购票请求:97,出票号:73,大厅排队总人数:403 出票窗口23号,购票请求:97,出票号:74,大厅排队总人数:391 出票窗口20号,购票请求:97,出票号:72,大厅排队总人数:408 出票窗口23号,购票请求:97,出票号:70,大厅排队总人数:406 出票窗口26号,购票请求:97,出票号:71,大厅排队总人数:407 出票窗口20号,购票请求:97,出票号:69,大厅排队总人数:420 出票窗口20号,购票请求:97,出票号:68,大厅排队总人数:422 出票窗口20号,购票请求:97,出票号:66,大厅排队总人数:433 出票窗口26号,购票请求:97,出票号:65,大厅排队总人数:439 出票窗口23号,购票请求:97,出票号:67,大厅排队总人数:429 出票窗口23号,购票请求:97,出票号:63,大厅排队总人数:442 出票窗口20号,购票请求:97,出票号:64,大厅排队总人数:442 出票窗口26号,购票请求:97,出票号:61,大厅排队总人数:457 出票窗口20号,购票请求:97,出票号:62,大厅排队总人数:447 出票窗口23号,购票请求:97,出票号:59,大厅排队总人数:470 出票窗口20号,购票请求:97,出票号:60,大厅排队总人数:469 出票窗口26号,购票请求:97,出票号:57,大厅排队总人数:489 出票窗口20号,购票请求:97,出票号:58,大厅排队总人数:481 出票窗口23号,购票请求:97,出票号:55,大厅排队总人数:509 出票窗口20号,购票请求:97,出票号:56,大厅排队总人数:494 出票窗口23号,购票请求:97,出票号:53,大厅排队总人数:541 出票窗口26号,购票请求:97,出票号:52,大厅排队总人数:547 出票窗口26号,购票请求:97,出票号:54,大厅排队总人数:522 出票窗口26号,购票请求:97,出票号:50,大厅排队总人数:568 出票窗口23号,购票请求:97,出票号:51,大厅排队总人数:557 出票窗口23号,购票请求:97,出票号:49,大厅排队总人数:587 出票窗口23号,购票请求:97,出票号:47,大厅排队总人数:602 出票窗口26号,购票请求:97,出票号:48,大厅排队总人数:596 出票窗口23号,购票请求:97,出票号:45,大厅排队总人数:631 出票窗口26号,购票请求:97,出票号:46,大厅排队总人数:613 出票窗口23号,购票请求:97,出票号:43,大厅排队总人数:656 出票窗口26号,购票请求:97,出票号:44,大厅排队总人数:649 出票窗口23号,购票请求:97,出票号:41,大厅排队总人数:705 出票窗口26号,购票请求:97,出票号:42,大厅排队总人数:679 出票窗口23号,购票请求:97,出票号:39,大厅排队总人数:725 出票窗口26号,购票请求:97,出票号:40,大厅排队总人数:716 出票窗口26号,购票请求:97,出票号:37,大厅排队总人数:756 出票窗口26号,购票请求:97,出票号:38,大厅排队总人数:740 出票窗口26号,购票请求:97,出票号:35,大厅排队总人数:797 出票窗口23号,购票请求:97,出票号:36,大厅排队总人数:771 出票窗口23号,购票请求:97,出票号:33,大厅排队总人数:850 出票窗口26号,购票请求:97,出票号:34,大厅排队总人数:832 出票窗口26号,购票请求:97,出票号:31,大厅排队总人数:887 出票窗口26号,购票请求:97,出票号:32,大厅排队总人数:867 出票窗口26号,购票请求:97,出票号:29,大厅排队总人数:913 出票窗口23号,购票请求:97,出票号:30,大厅排队总人数:898 出票窗口23号,购票请求:97,出票号:27,大厅排队总人数:939 出票窗口26号,购票请求:97,出票号:28,大厅排队总人数:924 出票窗口26号,购票请求:97,出票号:26,大厅排队总人数:953 出票窗口26号,购票请求:97,出票号:25,大厅排队总人数:953 出票窗口26号,购票请求:97,出票号:22,大厅排队总人数:999 出票窗口26号,购票请求:97,出票号:23,大厅排队总人数:998 出票窗口23号,购票请求:97,出票号:24,大厅排队总人数:972 出票窗口23号,购票请求:97,出票号:20,大厅排队总人数:999 出票窗口23号,购票请求:97,出票号:21,大厅排队总人数:999 出票窗口23号,购票请求:97,出票号:18,大厅排队总人数:999 出票窗口26号,购票请求:97,出票号:19,大厅排队总人数:999 出票窗口23号,购票请求:97,出票号:16,大厅排队总人数:999 出票窗口26号,购票请求:97,出票号:17,大厅排队总人数:999 出票窗口23号,购票请求:97,出票号:14,大厅排队总人数:999 出票窗口26号,购票请求:97,出票号:15,大厅排队总人数:999 出票窗口26号,购票请求:97,出票号:12,大厅排队总人数:999 出票窗口23号,购票请求:97,出票号:13,大厅排队总人数:999 出票窗口26号,购票请求:97,出票号:10,大厅排队总人数:999 出票窗口23号,购票请求:97,出票号:9,大厅排队总人数:999 出票窗口23号,购票请求:97,出票号:11,大厅排队总人数:999 出票窗口26号,购票请求:97,出票号:7,大厅排队总人数:999 出票窗口23号,购票请求:97,出票号:8,大厅排队总人数:1000 出票窗口26号,购票请求:97,出票号:5,大厅排队总人数:999 出票窗口23号,购票请求:97,出票号:6,大厅排队总人数:999 出票窗口23号,购票请求:97,出票号:3,大厅排队总人数:999 出票窗口23号,购票请求:97,出票号:4,大厅排队总人数:999 结束售票啦,收工下班 出票窗口23号,购票请求:97,出票号:1,大厅排队总人数:999 结束售票啦,收工下班 出票窗口26号,购票请求:97,出票号:2,大厅排队总人数:999 结束售票啦,收工下班
2023年01月31日
144 阅读
0 评论
0 点赞
2023-01-31
开发中常见的加密方式,对称加密,非对称加密,摘要签名算法的区别
目录加密一般分为两种,对称加密和非对称加密。对称与非对称区别对称加密对称加密就是加密解密都用同一个秘钥,比如DES、3DES(TripleDES)和AES等。非对称加密非对称加密就是加密和解密不是用的同一种秘钥,比如RSA算法、DSA算法、ECC算法、DH算法等。在非对称加密中,用来加密的秘钥叫公钥,用来解密的秘钥叫私钥。公钥和私钥都是成对生成的,公钥分发给其他人用来加密,私钥用来解密,典型的应用场景为支付宝开放平台的签名和数据加解密两种方式的优缺点对称加密:解密速度快,但保密性差。非对称加密:加密算法保密性好,它消除了最终用户交换密钥的需要。但是加解密速度要远远低于对称加密。摘要签名加密算法摘要算法是一种能产生特殊输出格式的算法,这种算法的特点是:无论用户输入什么长度的原始数据,经过计算后输出的密文都是固定长度的,这种算法的原理是根据一定的运算规则对原数据进行某种形式的提取,这种提取就是摘要,被摘要的数据内容与原数据有密切联系,只要原数据稍有改变,输出的“摘要”便完全不同,因此,基于这种原理的算法便能对数据完整性提供较为健全的保障。但是,由于输出的密文是提取原数据经过处理的定长值,所以它已经不能还原为原数据,即消息摘要算法是不可逆的,理论上无法通过反向运算取得原数据内容,因此它通常只能被用来做数据完整性验证。常见的摘要算法有:MD5,SHA,国密SM3等,一般用于登录后的token生成等,数据加密后交易等,典型场景如微信支付签名验证国密介绍国密为国家密码局认定的国产密码算法,即商用密码。国密算法是国家密码局制定标准的一系列算法。其中包括了对称加密算法,椭圆曲线非对称加密算法,杂凑算法。具体包括SM1,SM2,SM3,SM4等,密钥长度和分组长度均为 128 位。SM1 为对称加密SM2 为非对称加密SM3 摘要签名SM4 对称加密,分组密码算法。
2023年01月31日
74 阅读
0 评论
0 点赞
2023-01-18
解决Python 开发中pip install 下载慢/下载失败问题 pip3 国内镜像仓库地址
目录介绍在Python开发过程中,我们经常需要使用pip工具对第三方sdk软件包进行安装,新手开发者直接使用pip install packagename经常会遇到下载超时或者链接超时read time out,导致下载安装失败。因此我们需要将pip默认的国外仓库镜像地址(https://pypi.org/simple)修改为国内的镜像仓库地址,然后在进行安装第三方sdk本文介绍两种pip install修改仓库选择方式。一、下载安装时指定镜像地址# 下载包名是必须参数,版本是可选参数,该方式适用于临时指定仓库地址源使用 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package [下载包名][==版本号]二、 设置全局配置文件(推荐)# 成功后将在C:\Users\系统用户名\AppData\Roaming\pip\pip.ini 种写入配置 pip config set global.index-url https://mirrors.aliyun.com/pypi/simple我们也可以对C:\Users\系统用户名\AppData\Roaming\pip\pip.ini文件进行修改(如不存在需要手动新建文件)配置内容如下:[global] index-url = https://mirrors.aliyun.com/pypi/simple [install] trusted-host=mirrors.aliyun.com修改后,此时我们在执行pip install 下载发现下载速度和成功率都大大提高了好多,可以继续愉快的写代码了附主流镜像源地址清华:https://pypi.tuna.tsinghua.edu.cn/simple阿里云:http://mirrors.aliyun.com/pypi/simple/中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/华中理工大学:http://pypi.hustunique.com/山东理工大学:http://pypi.sdutlinux.org/豆瓣:http://pypi.douban.com/simple/本文内容参考与网络网站,如有侵权请联系作者删除
2023年01月18日
377 阅读
0 评论
0 点赞
2023-01-17
docker 远程调用API进行控制操作
目录一、前文介绍docker 支持使用API调用操作容器,镜像等服务,就跟平时我们在服务器中使用docker build ... 或者docker run .. 命令一样,同时官方提供GO和Python的客户端sdk方便我们进行调用,如果是别的语言也有开源的sdk方案dockerAPI文档: https://docs.docker.com/engine/api/v1.41 ,其中v1.41是我们对应安装的docker版本号,可以使用docker version查看当前主机中安装的docker版本信息docker-client SDK : https://docs.docker.com/engine/api/sdk/二、开启docker api远程调用服务开启远程API调用需要对docker的相关配置做修改,如果是远程扩主机调用并且开启了端口访问,为了安全起见还需要配置ssl证书1. 开启API服务1.1 开启方式一在/etc/sysconfig/docker文件里加一行OPTION配置diamagnetic(假如options已经存在 参数加后面就好了)OPTIONS='-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock'1.2 开启方式二在/usr/lib/systemd/system/docker.servic文件里的ExecStart参数后面添加-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock推荐使用第一种完成配置后需要重启docker服务systemctl restart docker最后验证是否已经开启服务成功,如果正常输出JSON数据则标识已开启API调用服务curl http://localhost:2375/version | python -m json.tool
2023年01月17日
382 阅读
0 评论
0 点赞
2023-01-16
Java中基本数据类型与对应的包装类型介绍
目录一. Java基本类型与包装类型介绍Java中有8种基本数据类型,分别为:数字类型(6种) :byte、short、int、long、float、double字符类型(1种) :char布尔型(1种) :boolean。这八种基本类型都有对应的包装类分别为:Byte、Short、Integer、Long、Float、DoubleCharacterBoolean基本类型位数字节默认值int3240short1620long6480Lbyte810char162'u0000'float3240fdouble6480dboolean1官方文档未明确定义,它依赖于 JVM 厂商的具体实现。逻辑上理解是占用 1位,但是实际中会考虑计算机高效存储因素。false二 类型的自动装箱与拆箱装箱与拆箱的含义:装箱:将基本类型用它们对应的引用类型包装起来;拆箱:将包装类型转换为基本数据类型;Java基本类型的包装类的大部分实现了常量池技术,即Byte,Short,Integer,Long,Character,Boolean;前面4种包装类默认创建了数值[-128,127]的相应类型的缓存数据,Character创建了数值在[0,127]范围的缓存数据,Boolean 直接返回True Or False。如果超出对应范围仍然会去创建新的对象。其中仅浮点数类型的包装类Float与Double 没有实现常量池技术。Boolean常量池public static Boolean valueOf(boolean b) { return (b ? TRUE : FALSE); // 其中TRUE与FALSE为定义的静态常量 }CharacterCache 缓存常量池private static class CharacterCache { private CharacterCache(){} static final Character cache[] = new Character[127 + 1]; static { for (int i = 0; i < cache.length; i++) cache[i] = new Character((char)i); } }/** *此方法将始终缓存-128 到 127(包括端点)范围内的值,并可以缓存此范围之外的其他值。 */ public static Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) //如果在缓存范围值内 return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); // 不如不在范围内者使用new运算符创建一个堆内存返回新的对象 }举例说明例子1 Integer i1 = 33; Integer i2 = 33; System.out.println(i1 == i2);// 输出 true, 因为33在-128-127范围内使用的是缓存常量,即两个数值的内存地址一致 Integer i11 = 333; Integer i22 = 333; System.out.println(i11 == i22);// 输出 false // 超出范围,返回的都是new的新对象 Double i3 = 1.2; Double i4 = 1.2; System.out.println(i3 == i4);// 输出 false // Double未实现缓存常量池 例子2需要注意一旦使用new运算符创建对象,则将创建新的数据,不会使用缓存常量值,如以下Integer i1 = 40; Integer i2 = new Integer(40); System.out.println(i1==i2);//输出 falseInteger i1=40;Java 在编译的时候会直接将代码封装成 Integer i1=Integer.valueOf(40);,从而使用常量池中的对象。Integer i1 = new Integer(40);这种情况下会创建新的对象。例子3Integer i1 = 40; Integer i2 = 40; Integer i3 = 0; Integer i4 = new Integer(40); Integer i5 = new Integer(40); Integer i6 = new Integer(0); System.out.println("i1=i2 : " + (i1 == i2)); // true,两个变量使用的是同一个常量值 System.out.println("i1=i2+i3 : " + (i1 == i2 + i3)); // true, 因为"+"加号运算符不能使用在Integer上,所以会自动拆箱为基础类型int:40+0=40, 同时"="等号也无法使用在Integer上,则最终比较为40=40 System.out.println("i1=i4 : " + (i1 == i4));// false System.out.println("i4=i5 : " + (i4 == i5)); // false System.out.println("i4=i5+i6 : " + (i4 == i5 + i6)); //true,加法运算发自动拆箱后进行加法运行并进行比较 System.out.println("40=i5+i6 : " + (40 == i5 + i6));// true,加法运算发自动拆箱后进行加法运行并进行比较
2023年01月16日
81 阅读
0 评论
0 点赞
1
...
3
4
5
...
20