Tiger 's esoterica read notebook

本文详细介绍了Java中的自动装箱与拆箱机制,包括它们如何在对象与基本类型间进行转换、条件运算符与拆箱的关系、Tiger版本方法解析规则的变化、vararg的使用方式及注意事项。
1

autoboxing 和autounboxing是指Java的对象和primitive间的转换,Java的primitive是指int,short,char等,基本不是对象的类型,而Integer,Short,Character是primitive的wrapper,是封装类.
这里有一个要注意的是NUll,因为NULL对一个对象来说是合法的,但对primitive来说不是,所以在程序中要注意不要装wrapper的NULL直接给primitive,它会Throw NullPointerExcpetion.

2 == & equals


// 如果i值介于 -127和127之间,则==是相等的,否则是不等的,equals方法是一直相等的.
//-127至127之间的值是不可变的wrapper

Integer i1 = 561;
Integer i2 = 561;
if(i1 == i2)
System.out.println("== True");
else
System.out.println("== false");

if(i1.equals(i2))
System.out.println("Equals true");
else
System.out.println("Equals false");

i1 = 123;
i2 = 123;

if(i1 == i2)
System.out.println("== True");
else
System.out.println("== false");

if(i1.equals(i2))
System.out.println("Equals true");
else
System.out.println("Equals false");
}


3 Conditional 与 unboxing

Conditional 是三元运算符: [conditional expression]?[expression1]:[expression2],true时,执行前者,否则执行后者.
这里两个结果条件表达式只要有一个被unbox即可以正常运行.


int a = 3;
double b = 2.3;
double re = ((a > b)? a :b);
System.out.println(re);

返回结果是3.0,而a,b的类型是不一样的,在以前的1.4版本中是不允许的.
因为int 和double有一个交集 double.
unboxing还为Switch引入一些新的值,Tiger之前只接收int,short,byte,character,现在有了unboxing,还可以引入enum,以及Integer,Short,Char,Byte

4 Tiger中method的解析步骤(三步):

A 编译器会试着不用任何的boxing/unboxing,或启用vararg来定位正确的method,这会找到根据Tiger以前的规则调用的任何方法
B 如果第一步失败,则会尝试解析method,但这次会允许boxing/unboxing的转换,具有vararg的method不在这次中解析.
C 如果第二步也失败,则会最后一次尝试允许boxing/unboxing,并且考虑vararg的method
这样的规则可以确保维持与Tiger之前的环境一致性.
例如:

public void done(double n);
public void done(Integer n);

假设你现在调用done 方法,int foo = 100;done(foo);
根据上述三个规则,首先int会被扩展成double并调用done(double n)方法.(这也是Tiger之前的规则),而不是首先调用boxing/unboxing来破坏一致性.不然调用时调用的方法不准确会导致不可预知的问题.

5 vararg == variable argument

vararg 允许你指定可以采用多个同类型参数的method,而不需要事先确定(于编译或运行时)参数的数目.它的表现形式是...,这三个小点点是vararg的关键.下面是使用vararg来允许未知参数的String零件的Guitar的constructor版本.

public Guitar(String builder,String model,String... features);

此处String...参数指出可提供任意数量的String参数.
当你指定了一个可变长度的参数list的时候,Java编译器基本上把它读作 创建一个<argument type>类型的array.你输入的是String... features,而编译器读到却是String[] features,这意味着iterate参数的list会很简单,你对vararg可以像对待array的操作那样.不过它还是有一些限制.这三个小点点只能在一个method中使用且出现在method中的最后一个位置,出现多个就是错误的,不合法的.
Java编辑器将String...视为array,String...的参数是从0到n个

public static int max(int... is){
if(is.length == 0){
throw new IllegalArgumentException("No Values Supplied");
}
int max = Integer.MIN_VALUE;
System.out.println(max);
for(int i : is){
if(i >max)
max = i;
}
System.out.println(max);
return max;
}
public static void main(String[] args) {

max(111,3,5,6,444,5);

}


避免自动化的Array转换

如上例中我们可以把String...换为更为广泛通用的Object...类型,你可以接收更多的参数.大部分的都会由Tiger来自动转换.不过有个特例

//Java.io.PrintStream的printf(String format,Object... objs);
Object[] objs = new String[]{"JavaEye","is","very","good","network station"};
System.out.printf("%s",objs);

上面这一切看起来很正常,但是运行起来以后会打印出Java,而不是一个Object对象.

这里是因为编译器将objs array当作一个对象来看,把array分离成多个对象,第一个参数变成了 String类型的"Java",当把它传给printf的%s时它就会把Java打印出来.

由于你想得到Object对象,所以你要告诉编译器你想要整个对象的array,将它当作一个对象来用.而不是一组参数来用.
所以我们用new Object[]{objs}或(Object)objs来转换一下,此时打印出来的就会是对象的形式.
【电力系统】单机无穷大电力系统短路故障暂态稳定Simulink仿真(带说明文档)内容概要:本文档围绕“单机无穷大电力系统短路故障暂态稳定Simulink仿真”展开,提供了完整的仿真模型与说明文档,重点研究电力系统在发生短路故障后的暂态稳定性问题。通过Simulink搭建单机无穷大系统模型,模拟不同类型的短路故障(如三相短路),分析系统在故障期间及切除后的动态响应,包括发电机转子角度、转速、电压和功率等关键参数的变化,进而评估系统的暂态稳定能力。该仿真有助于理解电力系统稳定性机理,掌握暂态过程分析方法。; 适合人群:电气工程及相关专业的本科生、研究生,以及从事电力系统分析、运行与控制工作的科研人员和工程师。; 使用场景及目标:①学习电力系统暂态稳定的基本概念与分析方法;②掌握利用Simulink进行电力系统建模与仿真的技能;③研究短路故障对系统稳定性的影响及提高稳定性的措施(如故障清除时间优化);④辅助课程设计、毕业设计或科研项目中的系统仿真验证。; 阅读建议:建议结合电力系统稳定性理论知识进行学习,先理解仿真模型各模块的功能与参数设置,再运行仿真并仔细分析输出结果,尝试改变故障类型或系统参数以观察其对稳定性的影响,从而深化对暂态稳定问题的理解。
本研究聚焦于运用MATLAB平台,将支持向量机(SVM)应用于数据预测任务,并引入粒子群优化(PSO)算法对模型的关键参数进行自动调优。该研究属于机器学习领域的典型实践,其核心在于利用SVM构建分类模型,同时借助PSO的全局搜索能力,高效确定SVM的最优超参数配置,从而显著增强模型的整体预测效能。 支持向量机作为一种经典的监督学习方法,其基本原理是通过在高维特征空间中构造一个具有最大间隔的决策边界,以实现对样本数据的分类或回归分析。该算法擅长处理小规模样本集、非线性关系以及高维度特征识别问题,其有效性源于通过核函数将原始数据映射至更高维的空间,使得原本复杂的分类问题变得线性可分。 粒子群优化算法是一种模拟鸟群社会行为的群体智能优化技术。在该算法框架下,每个潜在解被视作一个“粒子”,粒子群在解空间中协同搜索,通过不断迭代更新自身速度与位置,并参考个体历史最优解和群体全局最优解的信息,逐步逼近问题的最优解。在本应用中,PSO被专门用于搜寻SVM中影响模型性能的两个关键参数——正则化参数C与核函数参数γ的最优组合。 项目所提供的实现代码涵盖了从数据加载、预处理(如标准化处理)、基础SVM模型构建到PSO优化流程的完整步骤。优化过程会针对不同的核函数(例如线性核、多项式核及径向基函数核等)进行参数寻优,并系统评估优化前后模型性能的差异。性能对比通常基于准确率、精确率、召回率及F1分数等多项分类指标展开,从而定量验证PSO算法在提升SVM模型分类能力方面的实际效果。 本研究通过一个具体的MATLAB实现案例,旨在演示如何将全局优化算法与机器学习模型相结合,以解决模型参数选择这一关键问题。通过此实践,研究者不仅能够深入理解SVM的工作原理,还能掌握利用智能优化技术提升模型泛化性能的有效方法,这对于机器学习在实际问题中的应用具有重要的参考价值。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
【IEEE顶刊复现】水下机器人AUV路径规划和MPC模型预测控制跟踪控制(复现)(Matlab代码实现)内容概要:本文档聚焦于【IEEE顶刊复现】水下机器人AUV路径规划与MPC模型预测控制跟踪控制的研究,提供了完整的Matlab代码实现方案。内容涵盖AUV在复杂海洋环境下的路径规划算法设计与模型预测控制(MPC)的跟踪控制策略,重点复现了高水平期刊中的关键技术细节,包括动力学建模、约束处理、优化求解及控制反馈等环节。文档还附带多个相关科研方向的技术介绍与资源链接,突出其在智能控制与机器人领域的高仿真精度与学术参考价值。; 适合人群:具备一定自动化、控制理论或机器人学背景,熟悉Matlab/Simulink环境,从事科研或工程开发的研究生、高校教师及科研人员;尤其适合致力于路径规划、MPC控制、水下机器人系统开发等相关课题的研究者。; 使用场景及目标:①复现IEEE顶刊中关于AUV路径规划与MPC控制的核心算法;②深入理解MPC在非线性系统中的应用机制与优化求解过程;③为水下机器人、无人系统等方向的科研项目提供可运行的代码基础与技术参考;④辅助论文写作、项目申报与仿真验证。; 阅读建议:建议结合文档中提供的网盘资源(如YALMIP工具包、完整代码等)进行实践操作,重点关注MPC控制器的设计参数设置与路径规划算法的实现逻辑,同时可参考文中列举的其他研究方向拓展思路,提升科研效率与创新能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值