语法糖定义指的是,在计算机语言中添加某种语法,这种语法能使程序员更方便的使用语言开发程序,同时增强程序代码的可读性,避免出错的机会;但是这种语法对语言的功能并没有影响。
Java中的泛型,变长参数,自动拆箱/装箱,条件编译等都是

泛型定义java的泛型只在源代码存在,只供编辑器检查使用,编译后的字节码文件已擦除了泛型类型(类型T不确定)

将上面的代码的字节码反编译后:

  1. public static void main(String args[])
  2. {
  3. List stringList = new ArrayList();
  4. stringList.add("oliver");
  5. System.out.println((String)stringList.get(0));
  6. }

自动拆箱/装箱

再探拆箱装箱:

  1. public static void main(String[] args){
  2.  
  3. Integer i = 100;
  4. //System.out.println(i.intValue());//100,将对象拆箱成基本数据类型
  5.  
  6. Integer i1 = 2255;
  7. Integer i2 = 2255;
  8. System.out.println(i1==i2); //false 不是从缓冲池里面拿的
  9. System.out.println(i1.equals(i2));//内容肯定是相同的
  10.  
  11. Integer g1 =10;
  12. Integer g2 =10;
  13. System.out.println(g1==g2); //true
  14. System.out.println(g1.equals(g2));//true
    //Interger只在某个特定范围才是从缓存拿来的
  1. //而String类型的不论什么,都是缓存的
  1. Boolean b1 = false;
  2. Boolean b2 = false;
  3. System.out.println(b1==b2); //true
  4. System.out.println(b1.equals(b2));//true
  5.  
  6. String s1= "abc";
  7. String s2 ="abc";
  8. System.out.println(s1==s1); //true
  9. System.out.println(s1.equals(s2));//true
  10.  
  11. System.out.println("is equals?"+new String("abc").equals(new String("abc")));//true
  12. System.out.println("is equals?"+new String("abc")==(new String("abc"))); //false

  13. /**
  14. * 针对String作为一个基本类型来使用:
  15. 1。如果String作为一个基本类型来使用,那么我们视此String对象是String缓冲池所拥有的。
  16. 2。如果String作为一个基本类型来使用,并且此时String缓冲池内不存在与其指定值相同的String对象,那么此时虚拟机将为此创建新的String对象,并存放在String缓冲池内。
  17. 3。如果String作为一个基本类型来使用,并且此时String缓冲池内存在与其指定值相同的String对象,那么此时虚拟机将不为此创建新的String对象,而直接返回已存在的String对象的引用。
  18. */
  19. }

Java 可变长参数

  1. public static void main(String[] args) {
  2. System.out.println(add(2, 3)); //
  3. System.out.println(add(2, 3, 5));//
  4. }
  5. static int add(int x, int ...args) {
  6.  
  7. int sum = x;
  8. for (int i = 0; i < args.length; i++) {
  9. sum += args[i];
  10. }
  11. return sum;
  12. }
  1. public static void main(String[] args) {
  2. print();
  3.  
  4. print("hello");
  5.  
  6. print("hello","lisi");
  7.  
  8. print("hello","张三", "alexia");
  9. /**
  10. * hello
  11. hello lisi
  12. hello 张三 alexia
  13.  
  14. */
  15. System.out.println("加"+add()); // 0.0
  16. System.out.println("加"+add(1.0+2.3)); //3.3
  17. System.out.println("加"+add(1.0+2.2+0.1));//3.3
  18.  
  19. }

  20. //用户传入若干个double型数字,然后进行相加
  21. static double add(double ...args){
  22. double sum= 0 ;
  23. for(double i :args)
  24. sum+=i;
  25. return sum;
  26. }
  27.  
  28. //在具有可变长参数的方法中可以把参数当成数组使用,例如可以循环输出所有的参数值。
  29. static void print(String... args){
  30.  
  31. String str = "";
  32. for(String temp:args)
  33. str = str+" "+temp;
  34. // System.out.println(temp);
  35. System.out.println(str);
  36.  
  37. }
  38.  
  39. //适用于参数个数不确定,类型确定的情况
  40. 可变参数的特点:
  41. 1)、只能出现在参数列表的最后;
  42. 2)、...位于变量类型和变量名之间,前后有无空格都可以;
  43. 3)、调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中一数组的形式访问可变参数。
  44. }

枚举类型:见下一篇

Java 中的语法糖(7/15整个周六上午总结)的更多相关文章

  1. Java 中的语法糖

    百度百科对语法糖的定义 语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这 ...

  2. [转]谈谈Java中的语法糖

    *该博客转自 http://blog.csdn.net/danchu/article/details/54986442 语法糖(Syntactic Sugar),也称糖衣语法,指在计算机语言中添加的某 ...

  3. JVM(二):Java中的语法糖

    JVM(二):Java中的语法糖 上文讲到在语义分析中会对Java中的语法糖进行解糖操作,因此本文就主要讲述一下Java中有哪些语法糖,每个语法糖在解糖过后的原始代码,以及这些语法糖背后的逻辑. 语法 ...

  4. 浅析java中的语法糖

    概述 编译器是一种计算机程序, 它主要的目的是将便于人编写.阅读.维护的高级计算机语言所写的源代码程序, 翻译为计算机能解读.运行的低阶机器语言的程序, 即可执行文件.而 javac 就是java语言 ...

  5. 【Java基础】Java中的语法糖

    目录 Java中的语法糖 switch对String和枚举类的支持 对泛型的支持 包装类型的自动装箱和拆箱 变长方法参数 枚举 内部类 条件编译 断言 数值字面量 for-each try-with- ...

  6. Java中的语法糖

    一.范型 1. C#和Java范型的区别 在C#中范型是切实存在的,List<int>和List<String>就是两种不同的类型,它们在系统运行期间生成,有自己的虚方法表和类 ...

  7. Java 中的语法糖,真甜。

    我把自己以往的文章汇总成为了 Github ,欢迎各位大佬 star https://github.com/crisxuan/bestJavaer 我们在日常开发中经常会使用到诸如泛型.自动拆箱和装箱 ...

  8. Java初认识--Java中的语法结构

    Java中的语法结构(程序流程控制) Java的语法结构有四种: 1.顺序结构. 顺序结构很简单,就是按顺序执行,输出就可以了. 2.判断结构. 判断结构的一个代表性的语句是if:if语句有三种格式体 ...

  9. 看看C# 6.0中那些语法糖都干了些什么(终结篇)

    终于写到终结篇了,整个人像在梦游一样,说完这一篇我得继续写我的js系列啦. 一:带索引的对象初始化器 还是按照江湖老规矩,先扒开看看到底是个什么玩意. 1 static void Main(strin ...

随机推荐

  1. 雷林鹏分享:C# 不安全代码

    C# 不安全代码 当一个代码块使用 unsafe 修饰符标记时,C# 允许在函数中使用指针变量.不安全代码或非托管代码是指使用了指针变量的代码块. 指针变量 指针 是值为另一个变量的地址的变量,即,内 ...

  2. HBase基于region数目和data locality来balance regions

    1.  在Hbase的运维过程中,我们经常需要做如下操作: 移动 regionserver 到其他的 regionserver group中 下线一台机器 增加一台机器 移动 table 到其他 re ...

  3. Mac XMind8 保存时报错

    错误提示 截图 日志 查看错误日志的方式:打开xmind –> 关于xmind –> 安装细节 –> 选项卡 “配置” –> 查看错误日志 看到有Caused by: org. ...

  4. WinForm下的TabControl控件

    一.TabControl控件介绍 TabControl实现的具体效果: 在实际工作中,我是这么用TabControl控件,实现切换页面效果.比如要实现某个界面进行操作,然后还要查看一下日志,就可以使用 ...

  5. Ybquery项目部署idea

    家庭公计网的引用  

  6. Vysor_v1.6.9

    ---恢复内容开始--- 装系统 D:\home sys 触摸板驱动 1 D:\envs\common\jdk jdk安装 2 DriveTheLife 3 img 4 PCMaster 5 Sogo ...

  7. IntentService的用法,对比Service它会按顺序执行,不会像Service一样并发执行。

    package com.lixu.intentservice; import android.app.Activity; import android.content.Intent; import a ...

  8. constexpr和常量表达式的注意事项

    1.常量表达式,是指其值不可改变,且在编译阶段就已经得出计算结果的表达式,例如字面值就是常量表达式. 2.判断是否是常量表达式,要关注数据类型是否是const类型,初始值是否是在编译阶段就得到的. 3 ...

  9. Ant里面神奇的fork

    最近两天一直在处理ant运行java程序的一个问题,用IDE直接运行类里面的main函数一切正常,但用ant跑该函数就报错误,错误的原因是运行ant任务时调用的是AntClasloader,而IDE里 ...

  10. mysql 的 java 连接库

    mysql 的 java 连接库 解压缩mysql-connector-java-5.1.30.zip 将要使用的是mysql-connector-java-5.1.30-bin-g.jar和mysq ...