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来转换一下,此时打印出来的就会是对象的形式.
分享到:
相关推荐
《Esoteric Combine-开源:探索深奥编程语言的无限可能》 开源软件一直是推动技术进步的重要力量,Esoteric Combine项目正是这一力量的鲜活体现。它致力于构建一个强大的组合解释器,能够执行各种深奥(Esoteric)...
Spine 是一款强大的2D骨骼动画工具,由 Esoteric Software 开发。它的运行时库可以被集成到各种游戏引擎和应用程序中,以实现流畅、高效的动画效果。在 Dart 平台上,Spine 提供了一个 Dart 实现,允许开发者在 Dart...
《ASM-Tests:深入探索Esoteric-Assembler解释器的测试实践》 ASM-Tests是一个专门针对Esoteric-Assembler解释器的测试集,旨在确保这个独特的汇编器能够正确、高效地执行各种特异性的指令序列。Esoteric Assemblers...
神秘的组装者具有类似于汇编的语法的解释器。指数下载链接签出我们的最新版本。 您可以在此处找到安装说明。 从下载ZIP文件。 或者从获取可执行文件。如何使用? 执行asm path/to/file ,其中asm是命令(或二进制可...
典型用法: $ java -jar target/el.ook-0.1-SNAPSHOT.jar Greetings, Let me present you this program:- Usage : java -jar ook.jar [lingo] [-e] [-s:].lingo : -bf --> BrainFuck! lingo : -ook --> Ook! ...
Many hacking texts seem esoteric and confusing because of just a few gaps in this prerequisite education. This second edition of Hacking: The Art of Exploitation makes the world of hacking more ...
one meant to usher its recipient into a long-lost world of esoteric wisdom. When Langdon’s beloved mentor, Peter Solomon--a prominent Mason and philanthropist--is brutally kidnapped, Langdon ...
将Esoteric Software导出的Spine导出json格式转换为本地QML项目和动画。 这个想法是将动画和UI从Spine转换为QML,然后可以手动对其进行修改,以将其流畅地集成到您的Qt / QML游戏和应用中。 用法 spine-qml-...
JavaScript:深奥的部分 目录 介绍 古典与原型继承 伪古典继承 对象组成 ES6 class 分号 制表符与空格 语义版本控制 箭头函数语法 ... 关于如何在JavaScript中进行类继承的争论早于ES6 class关键字存在。...
"Esoteric programming language"(奇异编程语言)通常指的是那些设计独特、结构复杂,主要用于展示编程技巧和创造力,而非实际应用的语言。这类语言往往具有高度的抽象性和非直观性,使得编程者需要有较高的理解和...
WHO SHOULD READ THIS BOOK If you get a phone call at two in the morning because someone hacked your web page, then this book is for you. If management asks you to find out whether or not another em- ...
This book will help you understand and use the most important directory services—those based on the leading industry standards—without having to read the many esoteric standards documents available ...
overcomes reflection’s reputation as a mysterious and esoteric philo- sophical pursuit, or as a set of messy error-prone coding tricks. As reflection becomes increasingly common and useful in all ...
《黄帝内经》是中国古代医学的经典之作,分为《素问》和《灵枢》两部分,被誉为中医理论体系的基石。这篇描述提及了你拥有的是重新制作的版本,可能包括了现代化的排版或者电子化处理,标签为"eBook",暗示这是一个...
He cut his teeth on Wrox Press ASP guides, and since then he has written over 20 books, most notably as lead author for Wrox's bestselling Beginning ASP/ASP.NET series, and has contributed chapters ...
overcomes reflection’s reputation as a mysterious and esoteric philosophical pursuit, or as a set of messy error-prone coding tricks. As reflection becomes increasingly common and useful in all sorts...
欢迎来到 :helicopter: HELCAM :helicopter: HELCAM-在Haskell / Eta中实施的用于深奥语言的深奥小混凝土绝对机器FOR everyoneWHO want to run esoteric languagesTHE HELCAM IS a Heavenly Esoteric Little ...
mundane to the exotic: it’s fairly simple to use SNMP to monitor the health of your routers, servers, and other pieces of network hardware, but you can also use it to control your network devices, ...