说说&和&&的区别?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了说说&和&&的区别?相关的知识,希望对你有一定的参考价值。

两者的区别是前者在执行过程中会出现“短路”的现象。即若符号”&&”前的表达式如果为假,那么后面的那个表达式将不会被执行,直接返回false。

1、 相同点:

在java中”&&”和”&”都是逻辑运算符。

2、区别举例:

int i=0,j=1;

if(i++&&j++)

System.out.println(“j=”+j);

的输出结果是:j=1;而如果换成”&”则程序的输出结果将为:j=2,在我们书写的程序中一般是不会用后者的,因为我们的目的是必须两者都为真才执行下面的语句。同理,符号”||”和符号”|”的区别同例子。

参考技术A &和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。
&&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,例如,对于if(str != null && !str.equals(“”))表达式,当str为null时,后面的表达式不会执行,所以不会出现NullPointerException如果将&&改为&,则会抛出NullPointerException异常。If(x==33 & ++y>0) y会增长,If(x==33 && ++y>0)不会增长
&还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作,我们通常使用0x0f来与一个整数进行&运算,来获取该整数的最低4个bit位,例如,0x31 & 0x0f的结果为0x01。本回答被提问者和网友采纳
参考技术B 这两个在程序中的区别 if a & b then c else d ,意思是a和b两个条件都检查,如果都满足,则执行c.
if a && b then c else d意思是先检查a条件是否满足,如果满足检查b条件是否满足,如果b条件满足则执行c,如果检查a条件不满足,则直接执行d,不再去检查b条件是否满足。
简单说就是a&b两个条件不论是否满足都要检查
a && b,只要a不满足条件就不会检查b
参考技术C &是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)。正如楼上所说的:
if(expression1 & expression2)
中expression1 和expression2 无论expression1返回true还是false,都会继续判断expression2的返回值
if(expression1 && expression2)
中如果expression1 返回false,那么expression2 不执行,跳出if语句,
如果expression1 返回true,继续判断expression2
参考技术D &是位运算符。&&是布尔逻辑运算符。
在运行上,&两边的条件都要判断(不管前面的是ture还是false),而&&先判断前面的,若为false,则后面的不再判断。

一道面试题:说说进程和线程的区别(转)

一道面试题:说说进程和线程的区别

在理解进程和线程概念之前首选要对并发有一定的感性认识,如果服务器同一时间内只能服务于一个客户端,其他客户端都再那里傻等的话,可见其性能的低下估计会被客户骂出翔来,因此并发编程应运而生,并发是网络编程中必须考虑的问题。实现并发的方式有多种:比如多进程、多线程、IO多路复用。

多进程

进程是资源(CPU、内存等)分配的基本单位,它是程序执行时的一个实例。程序运行时系统就会创建一个进程,并为它分配资源,然后把该进程放入进程就绪队列,进程调度器选中它的时候就会为它分配CPU时间,程序开始真正运行。

Linux系统函数fork()可以在父进程中创建一个子进程,这样的话,在一个进程接到来自客户端新的请求时就可以复制出一个子进程让其来处理,父进程只需负责监控请求的到来,然后创建子进程让其去处理,这样就能做到并发处理。

# -*- coding:utf-8 -*-
import os

print(‘当前进程:%s 启动中 ....‘ % os.getpid())
pid = os.fork()
if pid == 0:
    print(‘子进程:%s,父进程是:%s‘ % (os.getpid(), os.getppid()))
else:
    print(‘进程:%s 创建了子进程:%s‘ % (os.getpid(),pid ))

输出结果:

当前进程:27223 启动中 ....
进程:27223 创建了子进程:27224
子进程:27224,父进程是:27223

fork函数会返回两次结果,因为操作系统会把当前进程的数据复制一遍,然后程序就分两个进程继续运行后面的代码,fork分别在父进程和子进程中返回,在子进程返回的值pid永远是0,在父进程返回的是子进程的进程id。

多线程

线程是程序执行时的最小单位,它是进程的一个执行流,是CPU调度和分派的基本单位,一个进程可以由很多个线程组成,线程间共享进程的所有资源,每个线程有自己的堆栈和局部变量。线程由CPU独立调度执行,在多CPU环境下就允许多个线程同时运行。同样多线程也可以实现并发操作,每个请求分配一个线程来处理。

线程和进程各自有什么区别和优劣呢?

  • 进程是资源分配的最小单位,线程是程序执行的最小单位。

  • 进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。

  • 线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。不过如何处理好同步与互斥是编写多线程程序的难点。

  • 但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。

老外的原话是这么说的 —-《Unix网络编程》:

  • fork is expensive. Memory is copied from the parent to the child, all descriptors are duplicated in the child, and so on. Current implementations use a technique called copy-on-write, which avoids a copy of the parent’s data space to the child until the child needs its own copy. But, regardless of this optimization, fork is expensive.

  • IPC is required to pass information between the parent and child after the fork. Passing information from the parent to the child before the fork is easy, since the child starts with a copy of the parent’s data space and with a copy of all the parent’s descriptors. But, returning information from the child to the parent takes more work.

  • Threads help with both problems. Threads are sometimes called lightweight processes since a thread is “lighter weight” than a process. That is, thread creation can be 10–100 times faster than process creation.

  • All threads within a process share the same global memory. This makes the sharing of information easy between the threads, but along with this simplicity comes the problem

以上是关于说说&和&&的区别?的主要内容,如果未能解决你的问题,请参考以下文章

谁能说说二乔玉兰,白玉兰和紫玉兰的区别?

面试:说说 RPC 调用和 HTTP 调用的区别

瓜子一面:说说 RPC 调用和 HTTP 调用的区别?

一道面试题:说说进程和线程的区别(转)

14期你能说说进程与线程的区别吗

面试题:说说 RPC 调用和 HTTP 调用的区别?