1. 두 번(1927) 빼면 이상한 결과가 나오는 이유는 무엇입니까?
(좋아요 3623개)
다음 프로그램을 실행하면 프로그램은 1초로 구분된 두 날짜 문자열을 구문 분석하고 비교합니다.
public static void main(String[] args) throws ParseException { SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String str3 = "1927-12-31 23:54:07"; String str4 = "1927-12-31 23:54:08"; Date sDt3 = sf.parse(str3); Date sDt4 = sf.parse(str4); long ld3 = sDt3.getTime() /1000; long ld4 = sDt4.getTime() /1000; System.out.println(ld4-ld3); }
출력은 다음과 같습니다.
353
ld4-ld3은 왜 1이 아니고(두 시간의 차이가 1초가 되기를 원하기 때문에) 353인가요?
각 날짜 문자열에 1초를 더하면:
String str3 = "1927-12-31 23:54:08"; String str4 = "1927-12-31 23:54:09";
ld4-ld3의 결과는 1입니다.
sun.util.calendar.ZoneInfo[id="Asia/Shanghai", offset=28800000,dstSavings=0, useDaylight=false, transitions=19, lastRule=null] Locale(Locale.getDefault()): zh_CN
해결 방법
이는 상하이 시간대이며 12월 31일로 변경되었습니다.
1927년 상하이의 시간대 변경에 대한 자세한 내용을 알아보려면 이 웹사이트를 확인하세요. 기본적으로 1927년 말 자정에는 항상 5분 52초 뒤로 설정됩니다. 따라서 "1927-12-31 23:54:08"은 실제로 두 번 발생하며 Java가 후자를 현지 날짜 및 시간으로 구문 분석하여 차이가 발생한 것처럼 보입니다.
2. Java는 "참조에 의한 전달"입니까, 아니면 "값에 의한 전달"입니까?
설명 좀 해주세요?
솔루션
Java는 항상 값으로 전달되었습니다. 불행히도 그들은 포인터 참조를 호출하기로 결정했기 때문에 새로 온 사람들은 항상 혼란스러워합니다. 이러한 참조는 값으로도 전달되기 때문입니다.
3. Java += 연산자에 대한 질문
(좋아요 2223개)
오늘날까지 나는 다음 예를 생각합니다:
Just A 약어:i += j;그러나 이렇게 하면:
i = i + j;그러나 i = i + j;는 컴파일할 수 없지만 i += j; i += j라는 뜻인데 실제로는 i = (type of i) (i + j)의 약자인가요?
int i = 5; long j = 8;
솔루션
이런 질문을 하시는 분들이 늘 계시고, JLS가 그 답을 가지고 있습니다. §15.26.2 복합 할당 연산자를 참조하세요. 발췌:
E1 op= E2 유형의 복합 할당 표현식은 E1 = (T)((E1) op (E2))와 동일합니다. 여기서 T는 E1의 유형이며 차이점은 E1은 한 번만 계산됩니다.
§15.26.2에서 인용된 예
[...] 다음 코드는 정확합니다.
x의 결과는 7과 같습니다. it 동일:short x = 3; x += 4.6;즉, 귀하의 가정이 정확합니다. 4. HashMap과 Hashtable의 차이점은 무엇인가요?
short x = 3; x = (short)(x + 4.6);
(1769 좋아요)
Java에서 HashMap과 Hashtable의 차이점은 무엇인가요?
멀티스레드가 아닌 애플리케이션에서는 어느 것이 더 효율적인가요?
솔루션
Java의 HashMap과 HashTable에는 몇 가지 차이점이 있습니다.
Hashtable은 동기화되지만 HashMap은 그렇지 않습니다. 이는 동기화되지 않은 객체가 일반적으로 동기화된 객체보다 더 나은 성능을 발휘하기 때문에 HashMap이 다중 스레드가 아닌 응용 프로그램에 더 적합하게 만듭니다.
해시테이블은 null 값과 키를 허용하지 않습니다. HashMap은 널 키와 널 값을 허용합니다.
HashMap의 하위 클래스는 LinkedHashMap입니다. 따라서 반복 순서(기본 삽입 순서)를 예측하려면 HashMap을 LinkedHashMap으로 변환하면 됩니다. Hashtable에서는 그렇게 간단하지 않습니다.
동기화가 문제가 되지 않으니 HashMap을 사용하시는 걸 추천드립니다. 동기화가 문제인 경우 ConcurrentHashMap을 살펴볼 수도 있습니다.
5. (방법) InputStream을 문자열로 읽거나 변환합니다
(1724 좋아요)
Process와 같은 java.io.InputStream 객체가 있는 경우 이 객체를 생성하고 문자열을 생성하시겠습니까?
텍스트 데이터가 포함된 InputStream 개체가 있고 이를 문자열로 변환하려고 한다고 가정합니다(예를 들어 스트림의 내용을 로그 파일에 쓸 수 있도록).
InputStream을 문자열로 변환하는 가장 쉬운 방법은 무엇입니까?
솔루션
Apache commons IOUtils 라이브러리를 사용하여 InputStream을 StringWriter로 복사하는 것은 다음과 유사한 좋은 방법입니다.
심지어StringWriter writer = new StringWriter(); IOUtils.copy(inputStream, writer, encoding); String theString = writer.toString();또는 Stream과 Writer를 혼합하고 싶지 않은 경우 ByteArrayOutputStream을 사용할 수 있습니다. 6. Java의 비밀번호는 왜 문자열 대신 char[]을 사용하는 것을 선호합니까?
// NB: does not close inputStream, you can use IOUtils.closeQuietly for that // 注意:不关闭inputStream,你可以使用 IOUtils.closeQuietly String theString = IOUtils.toString(inputStream, encoding);
(좋아요 1574개)
在Swing中,密码字段有一个getPassword()(返回 char数组)方法而不是通常的getText()(返回String)方法。同样的,我遇到过一个建议,不要使用 String 来处理密码。
为什么String涉及到密码时,它就成了一个安全威胁?感觉使用char数组不太方便。
解决方案
String是不可变的。这意味着一旦创建了字符串,如果另一个进程可以进行内存转储,在GC发生前,(除了反射)没有方法可以清除字符串数据。
使用数组操作完之后,可以显式地清除数据:可以给数组赋任何值,密码也不会存在系统中,甚至垃圾回收之前也是如此。
所以,是的,这是一个安全问题 – 但是即使使用了char数组,仅仅缩小了了攻击者有机会获得密码的窗口,它值针对制定的攻击类型。
7、遍历HashMap的最佳方法
(1504个赞)
遍历HashMap中元素的最佳方法是什么?
解决方案
这样遍历entrySet:
public static void printMap(Map mp) { Iterator it = mp.entrySet().iterator(); while (it.hasNext()) { Map.Entry pair = (Map.Entry)it.next(); System.out.println(pair.getKey() + " = " + pair.getValue()); it.remove(); // avoids a ConcurrentModificationException } }
更多请查阅Map。
8、(如何)从数组创建ArrayList
(1468个赞)
我有一个数组,初始化如下:
Element[] array = {new Element(1), new Element(2), new Element(3)};
我希望将这个数组转化成一个ArrayList类的对象。
解决方案
new ArrayList<Element>(Arrays.asList(array))
9、产生一个Java的内存泄露
(1478个赞)
我有过一个面试,被问到如何产生一个Java内存泄露。不用说,我感到相当傻,甚至如何产生一个的线索都没有。
那么怎么才能产生一个内存泄露呢?
解决方案
在纯Java中,有一个很好的方式可以产生真正的内存泄露(通过执行代码使对象不可访问但仍存在于内存中):
应用产生一个长时间运行的线程(或者使用一个线程池加速泄露)。
线程通过一个(可选的自定义)类加载器加载一个类。
该类分配大内存(例如,new byte[1000000]),赋值给一个强引用存储在静态字段中,再将它自身的引用存储到ThreadLocal中。分配额外的内存是可选的(泄露类实例就够了),但是这样将加速泄露工作。
线程清除所有自定义类的或者类加载器载入的引用。
重复上面步骤。
这样是有效的,因为ThreadLocal持有对象的引用,对象持有类的引用,接着类持有类加载器的引用。反过来,类加载器持有所有已加载类的引用。这会使泄露变得更加严重,因为很多JVM实现的类和类加载都直接从持久带(permgen)分配内存,因而不会被GC回收。
10、使用Java在一个区间内产生随机整数数
(1422个赞)
我试着使用Java生成一个随机整数,但是随机被指定在一个范围里。例如,整数范围是5~10,就是说5是最小的随机值,10是最大的。5到10之间的书也可以是生成的随机数。
解决方案
标准的解决方式(Java1.7 之前)如下:
import java.util.Random; public static int randInt(int min, int max) { Random rand; int randomNum = rand.nextInt((max - min) + 1) + min; return randomNum; }
请查看相关的JavaDoc。在实践中,java.util.Random 类总是优于 java.lang.Math.random()。
特别是当标准库里有一个直接的API来完成这个工作,就没有必要重复制造轮子了。

javaachievesplatformincendenceThoughthehoughthejavavirtualmachine (JVM), hittoutModification.thejvmcompileSjavacodeIntOplatform-independentByTecode, whatitTengretsAndexeSontheSpecoS, toplacetSonthecificos, toacketSecificos

javaispowerfuldueToitsplatformincendence, 객체 지향적, RichandardLibrary, PerformanceCapabilities 및 StrongSecurityFeatures.1) Platform IndependenceAllowsApplicationStorunannyDevicesUpportingjava.2) 대상 지향적 프로그래밍 프로모션 Modulara

최고 Java 기능에는 다음이 포함됩니다. 1) 객체 지향 프로그래밍, 다형성 지원, 코드 유연성 및 유지 관리 가능성 향상; 2) 예외 처리 메커니즘, 시도 캐치-패치 블록을 통한 코드 견고성 향상; 3) 쓰레기 수집, 메모리 관리 단순화; 4) 제네릭, 유형 안전 강화; 5) 코드를보다 간결하고 표현력있게 만들기위한 AMBDA 표현 및 기능 프로그래밍; 6) 최적화 된 데이터 구조 및 알고리즘을 제공하는 풍부한 표준 라이브러리.

javaisnotentirelyplatformindent의 의존적 duetojvmvariationsandnativecodeintegration

TheJavavirtualMachine (JVM) isanabstractcomputingmachinecrucialforjavaexecutionasitsjavabytecode, "writeonce, runanywhere"기능을 가능하게합니다

javaremainsagoodlugageedueToitscontinuousevolutionandrobustecosystem.1) lambdaexpressionsenhancececeadeabilitys.2) Streamsallowforefficileddataprocessing, 특히 플레어로드 라트 웨이션

javaisgreatduetoitsplatform incendence, robustoopsupport, extensibraries 및 strongcommunity.1) platforminceptenceviajvmallowscodetorunonvariousplatforms.2) oopeatures inncapsulation, Nheritance, and Polymorphismenblularandscode.3)

Java의 5 가지 주요 특징은 다형성, Lambda Expressions, Streamsapi, 제네릭 및 예외 처리입니다. 1. 다형성을 사용하면 다른 클래스의 물체가 공통 기본 클래스의 물체로 사용될 수 있습니다. 2. Lambda 표현식은 코드를보다 간결하게 만듭니다. 특히 컬렉션 및 스트림을 처리하는 데 적합합니다. 3.StreamSapi는 대규모 데이터 세트를 효율적으로 처리하고 선언적 작업을 지원합니다. 4. 제네릭은 유형 안전 및 재사용 성을 제공하며 편집 중에 유형 오류가 잡히립니다. 5. 예외 처리는 오류를 우아하게 처리하고 신뢰할 수있는 소프트웨어를 작성하는 데 도움이됩니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.