如果在算术运算中short自动提升int,那么为什么:
short thirty = 10 * 3;
Run Code Online (Sandbox Code Playgroud)
对short变量的合法分配thirty?
反过来,这个:
short ten = 10;
short three = 3;
short thirty = ten * three; // DOES NOT COMPILE AS EXPECTED
Run Code Online (Sandbox Code Playgroud)
以及:
int ten = 10;
int three = 3;
short thirty = ten * three; // DOES NOT COMPILE AS EXPECTED
Run Code Online (Sandbox Code Playgroud)
不编译,因为如果没有按预期方式转换,则不允许int为a 赋值short.
关于数值文字有什么特别之处吗?
我RollingRandomAccessFileAppender只配置了一个OnStartupTriggeringPolicyset,但是当我将max属性设置DefaultRolloverStrategy为某个数字时,日志会无限期地生成超过该数量.
这是我的log4j2.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<RollingRandomAccessFile
name="RollingRAF"
fileName="logs/app.log"
filePattern="logs/app-%d{dd-MMM-yyyy@HH.mm.ss}.log">
<PatternLayout>
<Pattern>%d %p %c{1.} %m%n</Pattern>
</PatternLayout>
<Policies>
<OnStartupTriggeringPolicy />
</Policies>
<DefaultRolloverStrategy max="5"/>
</RollingRandomAccessFile>
</Appenders>
<Loggers>
<Logger name="myLogger" level="warn">
<AppenderRef ref="RollingRAF"/>
</Logger>
<Root level="error">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
Run Code Online (Sandbox Code Playgroud)
是因为我的名字模式中没有迭代器吗?
是因为我的文件名精度设置为秒?
是因为我只有OnStartupTriggeringPolicy这套?
或者这里发生了什么?
我的目标是设置滚动配置,记录最近5次应用程序运行.
根据Oracle运算符优先级规范,执行如下操作:
x-- // Returns x, then subtracts 1 from x.
Run Code Online (Sandbox Code Playgroud)
应优先于:
--x // Subtracts 1 from x, then returns x.
Run Code Online (Sandbox Code Playgroud)
所以,鉴于下面的小片段,为什么:
int x = 5;
int y = --x * 5 + x--;
System.out.println(x+" vs "+y);
Run Code Online (Sandbox Code Playgroud)
打印3 vs 24而不是3 vs 20?
精
假设运算符优先级的给定顺序,可以将代码段的第2行分解为以下伪块(先前评估的值放在方括号中):
评估 x--
评估 --x
评估 [--x] * 5
评估 [--x * 5] + [x--]
评估 y = [--x * 5 + x--]
然后将解决如下:
1点之后 returns 5 sets x to 4
2点以后 …