java中的条件三目运算符符是什么?

java中位运算符左移右移是什么意思
[问题点数:20分]
java中位运算符左移右移是什么意思
[问题点数:20分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。java解惑 - 条件运算符 - justjavac(迷渡) - ITeye技术网站
博客分类:
这个谜题将测试你对条件操作符的掌握程度,这个操作符有一个更广为人知的名字:问号冒号操作符。下面的程序将会打印出什么呢?
public class DosEquis{
public static void main(String[] args){
char x = 'X';
int i = 0;
System.out.println(true ? x : 0);
System.out.println(false ? i : x);
这个程序由两个变量声明和两个print语句构成。第一个print语句计算条件表达式(true ? x : 0)并打印出结果,这个结果是char类型变量x的值’X’。而第二个print语句计算表达式(false ? i : x)并打印出结果,这个结果还是依旧是’X’的x,因此这个程序应该打印XX。然而,如果你运行该程序,你就会发现它打印出来的是X88。这种行为看起来挺怪的。第一个print语句打印的是X,而第二个打印的却是88。它们的不同行为说明了什么呢?
答案就在规范有关条件表达式部分的一个阴暗的角落里。请注意在这两个表达式中,每一个表达式的第二个和第三个操作数的类型都不相同:x是char类型的,而0和i都是int类型的。就像在谜题5的解答中提到的,混合类型的计算会引起混乱,而这一点比在条件表达式中比在其它任何地方都表现得更明显。你可能考虑过,这个程序中两个条件表达式的结果类型是相同的,就像它们的操作数类型是相同的一样,尽管操作数的顺序颠倒了一下,但是实际情况并非如此。
确定条件表达式结果类型的规则过于冗长和复杂,很难完全记住它们,但是其核心就是一下三点:
如果第二个和第三个操作数具有相同的类型,那么它就是条件表达式的类型。换句话说,你可以通过绕过混合类型的计算来避免大麻烦。
如果一个操作数的类型是T,T表示byte、short或char,而另一个操作数是一个int类型的常量表达式,它的值是可以用类型T表示的,那么条件表达式的类型就是T。
否则,将对操作数类型运用二进制数字提升,而条件表达式的类型就是第二个和第三个操作数被提升之后的类型。
2、3两点对本谜题是关键。在程序的两个条件表达式中,一个操作数的类型是char,另一个的类型是int。在两个表达式中,int操作数都是0,它可以被表示成一个char。然而,只有第一个表达式中的int操作数是常量(0),而第二个表达式中的int操作数是变量(i)。因此,第2点被应用到了第一个表达式上,它返回的类型是char,而第3点被应用到了第二个表达式上,其返回的类型是对int和char运用了二进制数字提升之后的类型,即int。
条件表达式的类型将确定哪一个重载的print方法将被调用。对第一个表达式来说,PrintStream.print(char)将被调用,而对第二个表达式来说,PrintStream.print(int)将被调用。前一个重载方法将变量x的值作为Unicode字符(X)来打印,而后一个重载方法将其作为一个十进制整数(88)来打印。至此,谜题被解开了。
总之,通常最好是在条件表达式中使用类型相同的第二和第三操作数。否则,你和你的程序的读者必须要彻底理解这些表达式行为的复杂规范。
对语言设计者来说,也许可以设计一个牺牲掉了部分灵活性,但是增加了简洁性的条件操作符。例如,要求第二和第三操作数必须就有相同的类型,这看起来就很合理。或者,条件操作符可以被定义为对常量没有任何特殊处理。为了让这些选择对程序员来说更加容易接受,可以提供用来表示所有原始类型字面常量的语法。这也许确实是一个好注意,因为它增加了语言的一致性和完备性,同时又减少了对转型的需求。
23 顶16 踩
哥们别把java解惑中看到的东西照搬,要有自己coding中的思想引入到java条件表达式中来,举戈多实际的例子来说明你的分析方法......3Q!例子如:&&&&&& public Page(Collection rows, int records, int pageSize, int page) {"this.rows = ((Collection) (rows != null ? rows: ((Collection) (new ArrayList(0)))));"& //依次来解释你怎么用到的
this.records =
this.page =
this.pageSize = pageS
total = calcTotalPage(); }谢谢。
好文……但是这样写是不是更容易凸现出差异阿
System.out.println(true ? x : i);
System.out.println(true ? x : 0);
而第3点被应用到了第二个表达式上,其返回的类型是对int和char运用了二进制数字提升之后的类型,即int。
可以说的具体一点吗?
浏览: 3501024 次
来自: 天津
浏览量:9553
justjavac 写道ziguopu 写道你写了赚钱的自由, ...
ziguopu 写道你写了赚钱的自由,我看了又骂你的自由,被骂 ...
非常在理。
你写了赚钱的自由,我看了又骂你的自由,被骂了你有反骂的自由
abc1561 写道justjavac 写道abc1561 写 ...不得不接受的变量小脾气:
1、Java 中的变量需要先声明后使用
2、变量使用时,可以声明变量的同时进行初始化
也可以先声明后赋值
3、变量中每次只能赋一个值,但可以修改多次
4、main 方法中定义的变量必须先赋值,然后才能输出
5、虽然语法中没有提示错误,但在实际开发中,变量名不建议使用中文,容易产生安全隐患,譬如后期跨平台操作时出现乱码等等
关于 String&:表示变量中存储的数据的类型为字符串,后面小节中会详细讲到,小小期待吧~~
大家来找茬!
你能找出在编辑器中第 3 行的错误吗?
?不会了怎么办
main 方法中定义的变量必须先赋值,然后才能输出
参考代码:String city = &青岛& ;
public class HelloWorld{
public static void main(String[] args) {
System.out.println(&我的家乡在:&+city);
请输入讨论内容...
分享给同学
<span style="color:#be 位共同战斗的同学
我们的使命:传播互联网最前沿技术,帮助更多的人实现梦想!
Copyright (C)
All Rights Reserved | 京ICP备 号-2您现在的位置: &
Java2入门经典教程 3.3 条件运算符[3]
&&& 布尔OR操作
&&& OR运算符,|和||,应用在当任意一个或者两个操作数都是true时,结果为true.的操作。条件的OR,||,和条件的AND具有相同的效果,即当运算符左边的操作数是true时,忽略右边的操作数的计算。显而易见,假如左边的操作数是true,则不管右边的操作数是true还是false,其结果都为true .
&&& 让我们举一个例子。对于16岁以下和65岁以上的人们,票价打折;你可以使用下面的if语句来测试:&&& if(age&16||age&=65)&&& tickeprice*=0.9&&&&&&&&&&& //Reduce ticket price by 10%
&&& 在这里,如果其中一个条件为true,则ticketPrice(票价)就降低%10.很显然,本例中的两个条件都不满足。
&&& 用|或者||进行操作时,若两个操作数都为false,则结果为false.若其中一个或两个操作数为true,则结果为true.
&&& 布尔NOT操作
&&& 第三种逻辑运算符,属一元运算符,其结果为操作数的相反值。所以,如果布尔变量state的值为true,则表达式!state的值就为false,反之则为true.为了介绍这个运算符在表达式中的使用方法,我们可以重新编写提供打折票价的代码段:
&&& if(age&16||age&=65)&&& tickeprice*=0.9&&&&&&&&&&& //Reduce ticket price by 10%
&&& 若年龄在16至64岁之间,表达式(age&=16&&age&65)为true.这一年龄段的居民不能享受打折,所以打折应该在表达式为false的时候执行。对表达式的结果使用!运算符就可以满足我们的需要。
&&& 我们也可以在下述表达式中应用!运算符,这是作家狄更斯的喜好:
&&& !(Income&Expenditure)
&&& 如果表达式为加。(就是说,你将入不敷出),结果就悲惨了,至少银行会马上开始退回你的支票。
&&& 当然,若需要的话,也可以在表达式中混合使用任何一种逻辑运算符。如果这个主题公园决定对12岁以下并且身高在48英寸以下,或者年龄在65岁以上并且身高在72英寸以上的人们提供门票打折的话,就可以使用下列测试语句实现这项测试操作:
&&& if ((age&12 && height&40) (age&65 && height&72)
&&& ticketPrice*=0.8&&&&&&&&& //20% discount on the ticket price
&&& 严格地说,这里并不需要括号,&&比||的优先级高,但是,增加括号可以使我们更加清楚这些比较操作的结合方式,也使程序更具有可读性。
&&& 不要把运算符&、|和!与看起来相同的逻辑运算符混淆,在特定的例子中,使用运算符的类型是由所使用的操作数类型决定的。位运算符应用于整数类型,并且产生一个整数结果,逻辑运算符应用于布尔型操作数,并且将产生布尔型结果、ture或false.如果你习惯的话,你可以在表达式中同时使用位运算符和逻辑运算符。
&&& 使用库方法测试字符
&&& 使用逻辑运算符测试字符,是一种演示这些运算符工作过程的很好途径,实际上,这也是一种更简便的方法。标准的包为我们提供了一系列标准方法可完成这类测试工作,其中包括用if语句测试特定的字符集,比如,字母、数字。它们可用于character类,该类被自动地加载到程序中。例如,我们可以在LetterCheck程序中编写如下所事的if语句:
&&& 试试看--无意义的译码
&&& 用下面代码替换LetterCheck类的代码块:&&& if (character.isUpperCase(symbol))&&& system.out.println(you have the capital letter symbol);&&& else&&& if (character.isLowerCase(symbol))&&& system.out.println(you have the capital letter symbol);&&& else&&& system.out println(The code is not a letter)
&&& 如何工作
&&& 如果传递给isUppeiCase()方法的char是大写字母,则该方法返回true,反之返回false.同样,如果传递给isLowerCase()方法的char是小写字母,则该方法返回true。[] &[] &[3] &[] &温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
天将降大任于斯人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,行拂乱其所为,所以动心忍性,增益其所不能。——孟子
LOFTER精选
static&boolean&test1(int&val){ &&&&&&&&&&System.out.println("test1("&+&val&+&")"); &&&&&&&&&&System.out.println("result:"&+&(val&1)); &&&&&&&&&&return&val&1; &&&&&&} &&&&&&static&boolean&test2(int&val){ &&&&&&&&&&System.out.println("test2("&+&val&+&")"); &&&&&&&&&&System.out.println("result:"&+&(val&2)); &&&&&&&&&&return&val&2; &&&&&&} &&&&&&static&boolean&test3(int&val){ &&&&&&&&&&System.out.println("test3("&+&val&+&")"); &&&&&&&&&&System.out.println("result:"&+&(val&3)); &&&&&&&&&&return&val&3; &&&&&&} &&&&&&public&static&void&main(String[]&args)&{ &&&&&&&&&&boolean&b&=&test1(0)&&&&test2(2)&&&&test3(2); &&&&&&&&&&System.out.println("expression&is&"&+&b); &&&&&&}&/**OutPut&&&&&&&&&&*&test1(0)&&&&&&&&&&*&result:true&&&&&&&&&&*&test2(2)&&&&&&&&&&*&result:false&&&&&&&&&&*&expression&is&false&&&&&&&&&&*/&&&第一个测试生成结果为true,所以表达式会继续下去。然而第二个测试产生了一个false结果。由于这意味着整个表达式肯定为false,所以没有必要继续计算剩余的表达式,那样做只是浪费。“短路”一词的由来正源于此。合理的短路设计会使程序性能获得潜在的提升。
阅读(576)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'java 逻辑运算符 短路(条件操作)',
blogAbstract:'一、java 与或非 操作与(&)、非(~)、或(|)、异或(^)1.与运算符与运算符用符号“&”表示,其使用规律如下:两个操作数中位都为1,结果才为1,否则结果为0,例如下面的程序段。public class data13',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:5,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'天将降大任于斯人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,行拂乱其所为,所以动心忍性,增益其所不能。——孟子',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}}

我要回帖

更多关于 三目运算符 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信