首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java中的宏变量,宏替换详解。

群友在微信群讨论的一个话题,有点意思,特拿出来分享一下。 输出true false 来看下面这段程序,和群友分享的大致一样。...首先来理解下宏变量: Java中,一个用final定义的变量,不管它是类型的变量,只要用final定义了并同时指定了初始值,并且这个初始值是在编译时就被确定下来的,那么这个final变量就是一个宏变量。...编译器会把程序所有用到该变量的地方直接替换成该变量的值,也就是说编译器能对宏变量进行宏替换。...final String a = "hello"; final String b = a; final String c = getHello(); a在编译期间就能确定下来,而b、c不行,所以a是宏变量...所以,再回到上面的程序,finalWorld2和finalWorld4是final定义的,也是在编译期间能确定下来的,所以它能被宏替换,编译器就会让finalWorld2和finalWorld4指向字符串池中缓存的字符串

3.8K50
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    java中的file是什么?

    大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说java中的file是什么?,希望能够帮助大家进步!!!...(推荐:java视频教程) 一、简述IO操作: 当需要把内存中的数据存储到持久化设备上的这个动作称为输出(写)output操作; 当把持久设备上的数据读取到内存中的这个动作称为输入(读)input操作。...); File file2=new File("D:\java","a.txt");//父路径、子路径--可以适用于多个文件的!...,"a.txt");//File类的父路径、子路径 System.out.println(file3); } } 3、File类的获取及文件的创建和删除、判断: import java.io.File...=new File("src");//写相对路径的话,会自动转成绝对路径,但是不去检验文件是否真实存在(只会给翻译回来,可能根本不存在) D:JAVA0322Day16src //获取文件对象的绝对路径

    1K30

    java中的stringbuffer是什么_java中&和&&的区别

    大家好,又见面了,我是你们的朋友全栈君。 JAVA提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。...这个String类提供了不可改变的字符串。 而这个StringBuffer类提供的字符串可以进行修改。 String: 为不可变对象,一旦被创建,就不能修改它的值....对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去....;//error 对象被建立以后,在内存中就会分配内存空间,并初始保存一个null.向StringBuffer 中付值的时候可以通过它的append方法. ss.append(“w!”)...而String是不能被修改的,只能重复的去创建对象来实现修改。——如果频繁的对字符串进行追加、替换、修改、插入、删除操作,最好使用StringBuffer。

    90730

    java中scanner是什么意思_java中scanner是什么

    java中的scanner是一个类,是用于扫描输入文本的新的实用程序;当在Eclipse中编写Java程序时,如果变量是需要手动输入的时候,此时就可以用到scanner类。...java中的scanner是一个类,是用于扫描输入文本的新的实用程序。本篇文章将给大家详细介绍一下,感兴趣的朋友可以来了解一下。...当我们在Eclipse中编写Java程序时,如果我们的变量是需要手动输入的时候,我们就可以用到scanner类了。 Scanner类,这是一个用于扫描输入文本的新的实用程序。...由于任何数据都必须通过同一模式的捕获组检索或通过使用一个索引来检索文本的各个部分。 于是可以结合使用正则表达式和从输入流中检索特定类型数据项的方法。...PS:在Eclipse中一定要在开始时在package下面导入java.util.Scanner;不然scanner便不能调用。

    2.5K20

    java中的pojo是什么意思_java中的POJO是什么意思?

    簡單的Java對象(Plain Ordinary Java Objects)實際就是普通JavaBeans,使用POJO名稱是為了避免和EJB混淆起來, 而且簡稱比較直接....其中有一些屬性及其getter setter方法的類,有時可以作為value object或dto(Data Transform Object)來使用.當然,如果你有一個簡單的運算屬性也是可以的,但不允許有業務方法...POJO是Plain Ordinary Java Objects的縮寫不錯,但是它通指沒有使用Entity Beans的普通java對象,可以把POJO作為支持業務邏輯的協助類。...POJO有一些private的參數作為對象的屬性。然后針對每個參數定義了get和set方法作為訪問的接口。...long getId() { return id; } public String getName() { return name; } } POJO對象有時也被稱為Data對象,大量應用於表現現實中的對象

    5.5K30

    java中的stringbuffer是什么_java string类

    话不多说开始: 区别一:在Java中字符串使用String类进行表示,但是String类表示字符串有一个最大的问题:“字符串常量一旦声明则不可改变,而字符串对象可以改变,但是改变的是其内存地址的指向。”...方式二:利用StringBuffer类中的append()方法(public StringBuffer append(String str))。...在实际开发中只有频繁修改内容才考虑使用StringBuffer类或StringBuilder类操作。 从JDK1.5开始,Java增加了一个新的字符串操作类:StringBuilder类。...,StringBuilder类和StringBuffer类是完全相同的,而且打开Java Doc文档后可以发现两个类的方法功能都是相同的。...而打开Java源码你会发现区别,在StringBuffer类中定义的方法全部使用“synchronized”进行同步定义,属于安全的线程操作;而StringBuilder类没有同步定义,StringBuilder

    43510

    聊聊Swift中的宏

    聊聊Swift中的宏 宏,Macros是一种常见的编程技术,传统的C语言中,即包含了宏功能。宏这种功能,简单来说是在代码的预编译阶段进行静态替换,是一种非运行时的特性。...但宏的元编程能力可以大大的提高编程的灵活性和复用性,Swift在5.9版本中重新引入了宏功能,并且是以一种全新的方式来定义和实现宏,在提供灵活性的同时保证代码的安全性和可靠性。...但这也有一些缺陷,相比与C语言的宏,Swift中的宏的定义非常抽象,实现复杂,不太利于开发者进行理解。...Swift中的宏分为两类: 1 - 独立宏 2 - 附加宏 其中,独立宏单独出现,单独使用,不会附加到任何声明(可以理解为原始代码)上。附加宏则需要配合声明一起使用,通常是为了向原代码中增加一些功能。...这些宏因为是标准库中的,我们无法查看展开后的样子,如果是自定义宏则可以直接展开查看,后面我们再介绍。

    68210

    宏中#和##的用法

    printf(STR(vck)); // 输出字符串"vck"     printf("%d   ", CONS(2,3)); // 2e3 输出:2000     return 0;   }   二、当宏参数是另一个宏的时候...  需要注意的是凡宏定义里有用'#'或'##'的地方宏参数是不会再展开.   1, 非'#'和'##'的情况   #define TOW (2)   #define MUL(a,b) (a*b)  ...printf("%d*%d=%d   ", TOW, TOW, MUL(TOW,TOW));   这行的宏会被展开为:   printf("%d*%d=%d   ", (2), (2), ((2)*(...加多一层中间转换宏.   加这层宏的用意是把所有宏的参数在这层里全部展开, 那么在转换宏里的那一个宏(_STR)就能得到正确的宏参数.  ...第二层: --> ___ANONYMOUS1(static int, _anonymous, 70);   第三层: --> static int _anonymous70;   即每次只能解开当前层的宏

    1.2K20

    Rust中的过程宏

    宏中的x变量是一个表达式(用x:expr标记),所以在展开后它知道如何正确处理,会将其展开为((1 + 1) * (1 + 1))。 然而这只是书本上常见的宏的简单用法。...对于宏编程,Rust中提供了几种过程宏的库操作支持,即: 1、Syn 它是基于TokenStream的一种语法分析过程,它并不很强大,需要自定义扩展一些宏,比如Rust中的函数和闭包等。...过程宏(Procedure Macro)是Rust中的一种特殊形式的宏,它将提供比普通宏更强大的功能。方便起见,本文将Rust中由macro_rules!定义的宏称为规则宏以示区分。...属性宏(Attribute macro):用在结构体、字段、函数等地方,为其指定属性等功能。如标准库中的#[inline]、#[derive(...)]等都是属性宏。...在宏展开的过程中,遇到派生宏时,会将整个结构体(或enum、union)展开成TokenStream作为派生宏函数的输入,然后将其输出的TokenStream附加到结构体后面,再继续作语法分析。

    2.6K30

    Java 中 ConcurrentHashMap 的并发度是什么?

    在Java中,并发度(Concurrency Level)指的是映射table被分成的段的数目,默认情况下为16个段。 ConcurrentHashMap的特征 1....另外,每个分割部分的更新操作都是一条独立的Java线程。 3. 高效迭代器 ConcurrentHashMap通过拥有有效的可伸缩性和高度并发算法并提供优秀的迭代器原语以处理各种类型的访问模式需求。...在JDK1.8版本引入的新的ConcurrentHashMap中,取消了最初SEGMENT概念对于设计变得更加简单。...总结 总的来说,ConcurrentHashMap是一种高度并发,线程安全且性能优越的数据结构,在Java中广泛使用于多线程环境中。...我们在考虑是否使用它时应该考虑的因素包括:数据操作的类型,执行次数、内存占用、Java jvm版本等。

    31010

    JAVA8 中的stream 是什么?

    Stream(流)是一个来自数据源的元素队列并支持聚合操作 元素是特定类型的对象,形成一个队列。Java中的Stream并不会存储元素,而是按需计算。 数据源 流的来源。...Stream提供了内部迭代的方式, 通过访问者模式(Visitor)实现 java.util.Stream 表示可以在其上执行一个或多个操作的元素序列。流操作是中间或终端。...8 中的集合已被扩展,因此您可以通过调用 Collection.stream() 或Collection.parallelStream()来简单地创建流。...这个操作是中间的,使我们能够调用另一个流操作(forEach)的结果。ForEach 接受一个消费者被执行的过滤流中的每个元素。ForEach 是一个终端操作。...,合并或者将键/值放入 map 中;否则将调用合并函数来更改现有值。

    1.4K10
    领券