17道Java基础面试题!收藏吃灰!( 三 )


例如:
public static void main(String[] args) {int x = 10;modify(x);System.out.println(x); // 输出: 10}public static void modify(int value) {value = https://www.isolves.com/it/cxkf/yy/JAVA/2023-08-05/20;}在这个例子中 , 我们将x传递给modify方法 。modify方法内部修改了value的值 , 但这不会影响x的值 , 因为传递的是x的值 , 而不是x本身 。
2、 引用数据类型: 对于引用数据类型(如对象、数组等) , 值传递意味着传递的是对象引用的值 , 而不是对象本身 。因此 , 在方法内部 , 我们可以修改对象的状态(如字段值) , 但不能改变原始引用所指向的对象 。
例如:
public static void main(String[] args) {StringBuilder sb = new StringBuilder("hello");modify(sb);System.out.println(sb); // 输出: hello world}public static void modify(StringBuilder value) {value.append(" world");}在这个例子中 , 我们将sb传递给modify方法 。modify方法内部修改了value所指向对象的状态(追加了" world") , 这会影响sb所指向的对象 , 因为传递的是对象引用的值 。然而 , 我们不能改变sb本身指向的对象 , 例如:
public static void main(String[] args) {StringBuilder sb = new StringBuilder("hello");modify(sb);System.out.println(sb); // 输出: hello}public static void modify(StringBuilder value) {value = https://www.isolves.com/it/cxkf/yy/JAVA/2023-08-05/new StringBuilder("hello world");}在这个例子中 , modify方法内部将value指向了一个新的对象 。这不会影响sb所指向的对象 , 因为传递的是对象引用的值 , 而不是对象本身 。
综上所述 , Java中的方法参数传递是按值传递的 , 无论是基本数据类型还是引用数据类型 。对于引用数据类型 , 传递的是对象引用的值 , 这使得我们可以在方法内部修改对象的状态 , 但不能改变原始引用所指向的对象 。
Java 中 IO 流分为哪几种?1、Java 中 IO 流的分类Java中的流可以按照数据的类型和传输的方向来分类 , 分别由四个抽象类来表示 , Java中其他多种多样变化的流均是由它们派生出来的 。
按照数据的类型 , 流分为字节流和字符流:

  • 字节流:InputStream , OutputStream 。字节流按照8位传输 , 可以处理任何类型的数据 , 包括二进制数据 。
  • 字符流: Reader , Writer 。字符流按照16位传输 , 只能处理字符或者字符串 , 可以直接处理Unicode字符 。
按照传输的方向 , 流分为输入流和输出流:
  • 输入流:InputStream , Reader 。输入流用于从数据源读取数据到内存中 。
  • 输出流:OutputStream , Writer 。输出流用于从内存中写出数据到目标位置 。
2、字节流和字符流的区别字节流和字符流的区别主要在于处理数据的类型不同:
  • 字节流可以处理任何类型的数据 , 包括二进制数据 , 而字符流只能处理字符或者字符串;
  • 字节流提供了处理任何类型的IO操作的功能 , 但它不能直接处理Unicode字符 , 而字符流就可以 。
  • 字节流在读写文本数据时 , 需要进行编码和解码的转换 , 而字符流则不需要 。
3、适用场景分析BIO方式适用于连接数目比较小且固定的架构 , 这种方式对服务器资源要求比较高 , 并发局限于应用中 , JDK1.4以前的唯一选择 , 但程序直观简单易理解 。NIO方式适用于连接数目多且连接比较短(轻操作)的架构 , 比如聊天服务器 , 并发局限于应用中 , 编程比较复杂 , JDK1.4开始支持 。AIO方式使用于连接数目多且连接比较长(重操作)的架构 , 比如相册服务器 , 充分调用OS参与并发操作 , 编程比较复杂 , JDK7开始支持 。
抽象工厂和工厂方法模式的区别抽象工厂模式(Abstract Factory)和工厂方法模式(Factory Method)都是创建型设计模式 , 用于处理对象的创建过程 。它们之间的主要区别在于处理对象创建的复杂性和抽象层次 。
1、 工厂方法模式: 工厂方法模式主要用于创建一类产品 。在这个模式中 , 有一个抽象的工厂接口 , 它定义了一个用于创建产品的方法 。具体的工厂类实现这个接口 , 并负责创建具体的产品 。客户端只需要使用抽象工厂接口 , 而不需要知道具体的工厂和产品类 。这使得客户端可以在运行时切换不同的工厂实现 , 从而创建不同的产品 。


推荐阅读